如果我返回一个属性为空值的JSON,如何强制网格识别值已从null更改并将其标记为isDirty?
{
"prop1": null,
"prop2": "",
"prop3": "my val"
}
用户第一次在Ext.grid.EditorGridPanel中编辑prop1单元格时,它不会被标记为脏,但是只要第二次编辑它就会被标记为脏。空字符串在第一次编辑时正常工作。
在进一步调试时,似乎使用record.set(),其中JSON属性具有空值,然后在设置记录数据之前返回
set : function(name, value){
var encode = Ext.isPrimitive(value) ? String : Ext.encode;
if(encode(this.data[name]) == encode(value)) {
return; //if null it always returns here
}
更新:
解决方法是设置记录的数据属性的原始值:
data = segments[i]; //my JSON
recMetadata = Ext.data.Record.create(store.fields.items);
r = new recMetadata({}, data.MyID); //blank record with ID
for (j in data) {
//r.set(j, data[j]); //does not set the data property if null
r.data[j] = data[j]; //set raw value and all is fine with isDirty etc.
}
store.insert(0, r);
答案 0 :(得分:2)
这是ExtJS isDirty方法的已知问题,我认为他们计划在下一个主要版本中解决它。
你用什么来加载JSON?是否可以更改输出以使其返回空字符串?
答案 1 :(得分:2)
您可以手动将记录设置为每个afteredit上的脏记录,以确保...
在EditorGridPanel配置中:
listeners: {
'afteredit': function(e) {
if(e.value != e.originalValue) {
e.record.markDirty();
}
}
}