具有空值的ExtJS JSON记录

时间:2011-03-10 10:33:10

标签: javascript json extjs

如果我返回一个属性为空值的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); 

2 个答案:

答案 0 :(得分:2)

这是ExtJS isDirty方法的已知问题,我认为他们计划在下一个主要版本中解决它。

你用什么来加载JSON?是否可以更改输出以使其返回空字符串?

答案 1 :(得分:2)

您可以手动将记录设置为每个afteredit上的脏记录,以确保...

在EditorGridPanel配置中:

listeners: {
   'afteredit': function(e) {
       if(e.value != e.originalValue) {
          e.record.markDirty();
       }
   }
}