2011-03-10 54 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