Ext.ux.grid.RowEditor 遇到修改的记录有时生效 有时失效,求帮助
日同信息 2015-01-07 11:02:54 引用的js文件 Ext.ux.grid.RowEditor
页面js源码:
Ext.namespace("ssi.rule");
ssi.rule.RuleCondMgrControl = function(config) {
Ext.apply(this, config);
this.initialize();
};
ssi.rule.RuleCondMgrControl.prototype = {
initialize : function() {
var win = new Ext.Viewport({
layout : 'border',
items : [this.getGrid()],
renderTo : Ext.getBody()
});
win.show();
win.doLayout(true, true);
},
cancel : function(editor, forced) {
var r = this.grid.getSelectionModel().getSelected();
if (r.data.condId == null){
this.grid.getStore().remove(r);
}
this.grid.getView().refresh();
},
save : function(editor, value, record, rowIdx) {
this.showMask();
var url = this.rootPath + "/rule/cond_insertOrUpdate.do";
var ds = util.GetMsgDs(url);
// 回叫函数
ds.on("load", function(ds) {
this.hideMask();
var rs = ds.getAt(0);
if (rs.data.status != "OK") {// 如果加载数据失败则给出错误提示
alert("错误:" + rs.data.msg);
return;
}
this.grid.getStore().load();
}, this);
ds.load({params:record.data});
},
getGrid : function(){
if (this.grid == null){
var store = new Ext.data.Store({
proxy : new Ext.data.HttpProxy({
url :this.rootPath + "/rule/cond_getRuleCondGridData.do?ruleId="+this.ruleId
}),
reader : new Ext.data.JsonReader({
root : "rows",
totalProperty : "totalCount"
}, [
{ name : "condId" },
{ name : "ruleId" },
{ name : "ruleObjId" },
{ name : "operator" },
{ name : "seq" },
{ name : "param" }
])
});
store.on("load", function(ds){
if (store.getCount() >= 0) {
this.grid.getSelectionModel().selectFirstRow();
}
}, this);
this.editor = new Ext.ux.grid.RowEditor({
saveText : '确认',
cancelText : '取消',
listeners : {
canceledit : this.cancel,
afteredit : this.save,
beforeedit:function() {
Ext.getCmp('operatorCB').getStore().removeAll();
var r = this.grid.getSelectionModel().getSelected();
if(r){
var index = Ext.getCmp('objCB').getStore().find('rule_obj_id', r.data.ruleObjId);
var record = Ext.getCmp('objCB').getStore().getAt(index);
if(record!=null){
this.loadOperatorStore(record.data.operator);
}
}
},
scope : this
}
});
var sm = new Ext.grid.RowSelectionModel({singleSelect:true});
var cm = this.getColumnModel();
this.grid = new Ext.grid.EditorGridPanel({
region : 'center',
store:store ,
trackMouseOver: true,
disableSelection: false,
clicksToEdit: 2,
loadMask: true,
cm: cm,
sm: sm,
plugins: [this.editor],
viewConfig : {
forceFit : true //让grid的列自动填满grid的整个宽度,不用一列一列的设定宽度。
},
tbar : this.createToolbar(),
listeners : {
afterrender : function() {
this.grid.store.load();
},
scope:this
}
});
}
return this.grid;
},
loadOperatorStore : function(strData) {
var str = strData.split(',');
var datas = new Array();
for(var i=0; i<str.length; i++) {
datas[i]=new Array();
for(var j=0;j<2;j++){
datas[i][j]=str[i];
}
}
Ext.getCmp('operatorCB').getStore().loadData(datas);
},
getColumnModel : function() {
var objStore = new Ext.data.JsonStore({
fields : ['rule_obj_id','name', 'operator'],
data : this.ruleObjStore
});
var operatorStore = new Ext.data.ArrayStore({
fields : ['name','value']
});
return new Ext.grid.ColumnModel([new Ext.grid.RowNumberer(), {
header : '条件编号',
dataIndex : 'condId',
hidden : true
},{
header : '规则编号',
dataIndex : 'ruleId',
hidden : true
}, {
header : '规则对象',
dataIndex : 'ruleObjId',
sortable: true,
editor : this.objCombo = new Ext.form.ComboBox({
typeAhead: true,
triggerAction: 'all',
id : 'objCB',
lazyRender:true,
editable : false,
forceSelection : true,
store: objStore,
mode : 'local',
valueField: 'rule_obj_id',
displayField: 'name',
listeners : {
select : function (combo,r,idx){
operatorStore.removeAll();
this.loadOperatorStore(r.data.operator);
},
scope : this
}
}),
renderer : function(value, p, r) {
var index = objStore.find(Ext.getCmp('objCB').valueField, value);
var record = objStore.getAt(index);
var displayText = "";
if (record == null) {
displayText = value;
} else {
displayText = record.data.name;
}
return displayText;
}
}, {
header : '操作符',
dataIndex : 'operator',
sortable: true,
editor : new Ext.form.ComboBox({
typeAhead: true,
triggerAction: 'all',
id : 'operatorCB',
lazyRender:true,
editable : false,
forceSelection : true,
store: operatorStore,
mode : 'local',
valueField: 'name',
displayField: 'name'
})
}, {
header : '参数',
dataIndex : 'param',
sortable: true,
editor: {
xtype: 'textfield',
emptyText:'参数不能为空'
}
}, {
header : '排序',
dataIndex : "seq",
sortable: true,
editor: {
xtype: 'numberfield'
}
}]);
},
createToolbar : function() {
return new Ext.Toolbar({
id : 'toolbar',
items : [new ssi.auth.Action({
text : "添加",
auths:this.auths,
authorityId : 'ADJUST_MGR_CFG_RULE_COND_ADD',
scope : this,
icon : this.rootPath + '/resources/images/toolbar/add.gif',
handler: function(){
if(null == this.ruleId){
alert("请选择一条规则");
return;
}
var Plant = this.grid.getStore().recordType;
var number = this.grid.getStore().getCount();
var e = new Plant({
ruleId:this.ruleId,
ruleObjId:'',
operator:'',
param:'',
seq:number+1
});
this.editor.stopEditing();
this.grid.getStore().insert(0,e);
this.grid.getView().refresh();
this.grid.getSelectionModel().selectRow(0);
this.editor.startEditing(0);
}
}), new ssi.auth.Action({
text : "删除",
auths:this.auths,
authorityId : 'ADJUST_MGR_CFG_RULE_COND_DEL',
scope : this,
icon: this.rootPath + '/resources/images/toolbar/delete.gif',
listeners : {
click :this.del,
scope : this
}
}), '->', "<font color=red>例:<b>包含</b>参数如:'A','B'或1,2; <b>like</b>参数如:%A%或A%或%A</font>"
]});
},
del : function() {
var sm = this.grid.getSelectionModel();
var r = sm.getSelected();
if (!r) {
alert('请选择一个记录');
return;
}
if (!confirm("删除后无法恢复,确认删除?")) {
return;
}
this.showMask();
var url = this.rootPath + "/rule/cond_del.do?condId=" + r.data.condId;
var ds = util.GetMsgDs(url);
// 回叫函数
ds.on("load", function(ds) {
this.hideMask();
var rs = ds.getAt(0);
if (rs.data.status != "OK") {// 如果加载数据失败则给出错误提示
alert("错误:" + rs.data.msg);
return;
}
this.grid.getStore().remove(r);
if (sm.hasPrevious()) {
sm.selectPrevious(true);
} else {
sm.selectFirstRow();
}
}, this);
ds.load();
},
showMask : function() {
if (!this.loadMask) {
this.loadMask = new Ext.LoadMask(Ext.getBody(), {
msg : "正在加载数据请稍后..."
});
}
this.loadMask.show();
},
hideMask : function() {
if (this.loadMask) {
this.loadMask.hide();
}
}
};