所以我有ExtJs 4 Grid Panel
有两列。
列 ONE 是带有自定义渲染器的ComboBox
Ext.ux.comboBoxRenderer = function(combo) {
return function(value) {
var idx = combo.store.find(combo.valueField, value);
var rec = combo.store.getAt(idx);
return (rec == null ? '<img src="/js/extjs4/resources/themes/images/default/grid/loading.gif" />' : rec.get(combo.displayField) );
};
}
列 TWO 是数字列
{
allowBlank: false,
header: 'Time',
dataIndex: 'tedPaidTime',
align: 'right',
field: {
xtype: 'numberfield',
allowBlank: false,
minValue: 0,
maxValue: 100000
},
flex: 0.20,
selectOnFocus:true
}
现在,当我加载DataStore
时,我希望 FIRST 列只读。如果我设置ReadOnly
标志,这很容易。
但是,我有一个按钮,可以将 NEW 记录添加到商店,我希望新记录不具有只读标志。
所以基本上,一旦你改变第一列并保存,你就无法改变它。只能在保存之前更改新记录。
此处的业务规则要求他们删除旧记录,如果它不正确。
感谢。
答案 0 :(得分:0)
我自己能够解决这个问题。
基本上,我在selectionchange
事件中记录了组合。
然后,在focus
事件中,我检查了它是否具有来自商店的必需数据密钥。如果没有,那么我假设一个新行并运行以下内容:
focus: function(combo) {
var cb = combo;
if(newTEDetailRecord) {
if(newTEDetailRecord.data["activityKey"] == "") {
console.log("newTEDetailRecord", newTEDetailRecord);
cb.setEditable(true);
cb.setReadOnly(false);
cb.focus();
cb.selectText();
} else {
cb.setReadOnly(true);
}
}
},