Javascript 具有空值的ExtJSON记录

Javascript 具有空值的ExtJSON记录,javascript,json,extjs,Javascript,Json,Extjs,如果一个JSON返回了一个属性的null值,我如何强制网格识别一个从null变为null的值并将其标记为isDirty { "prop1": null, "prop2": "", "prop3": "my val" } 用户第一次编辑Ext.grid.EditorGridPanel中的prop1单元格时,不会将其标记为脏单元格,但第二次编辑后会将其标记为脏单元格。空字符串在第一次编辑时正常工作 在进一步调试时,似乎在设置记录数据之前,使用record.set()返回一个JSON属性

如果一个JSON返回了一个属性的null值,我如何强制网格识别一个从null变为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); 

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


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

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


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

您可以在每次编辑后手动将记录设置为脏记录,以确保

在EditorGridPanel配置中:

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

您可以在每次编辑后手动将记录设置为脏记录,以确保

在EditorGridPanel配置中:

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

谢谢你的回复。我可以查看web服务是否可以更新(目前我正在独立于它们工作)。我原以为JSONReader中的convert函数可以工作,但我似乎无法正确设置它。您可以将记录字段设置为string,这将为您进行转换:
设置为string不起作用,但我通过在代码的前面设置原始值来解决问题。感谢您的回复。我可以查看web服务是否可以更新(目前我正在独立于它们工作)。我认为JSONReader中的转换函数可以工作,但我似乎无法正确设置它。您可以将记录字段设置为string,这将为您进行转换:
设置为string不起作用,但我通过在代码的前面设置原始值来解决问题。使用afteredit非常有效(添加刷新网格视图以显示修改后的记录)。我找到了一种修复记录对象中缺少字段的基本问题的方法。使用afteredit非常有效(添加刷新网格视图以显示修改后的记录)。我找到了一种修复记录对象中缺少字段的基本问题的方法。