2011-03-10 43 views
0

如果我有一个JSON返回一个属性的空值,我如何强制网格识别值已经从null更改并将其标记为isDirty?ExtJS空值的JSON记录

{ 
    "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

您可以手动设置记录为脏每afteredit是的......

在你EditorGridPanel配置:

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

使用非常好的工作(添加网格视图的刷新以显示修改后的记录)。我发现了一种解决记录对象中缺少字段的潜在问题的方法。 – geographika 2011-03-10 15:04:56

2

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

你用什么来加载JSON?是否有可能改变输出,以便它返回一个空字符串?

+0

感谢您的答复。我可以看到Web服务是否可以更新(目前我正在独立工作)。我认为JSONReader中的转换函数可以工作,但我似乎无法正确设置它。 – geographika 2011-03-10 11:24:22

+0

您可以将记录字段设置为字符串,它将为您执行转换:'' – 2011-03-10 11:28:39

+0

设置为字符串不起作用,但我设法解决通过在代码的早期设置原始值来解决问题。 – geographika 2011-03-10 15:06:02