2013-03-05 17 views
0

在我的Ext JS 4.1應用程序,我有一個belongsTo關聯模型ProjectProjectCategory通過代理更新嵌套JSON時未關聯相關模型?

Ext.define('MyApp.model.Project', { 
    extend: 'Ext.data.Model', 
    fields: ['id', 'project_category_id', 'title'], 
    belongsTo: { 
    model: 'MyApp.model.ProjectCategory', 
    associationKey: 'ProjectCategory', 
    getterName: 'getCategory' 
    } 
    // ... 
}); 

Ext.define('MyApp.model.ProjectCategory', { 
    extend: 'Ext.data.Model', 
    fields: ['id', 'title'] 
}); 

該項目通過直接代理閱讀,ProjectCategory細節包括在響應嵌套值(主要是用於顯示目的)。當加載一個店,相關的數據被正確讀取,並且我可以通過自定義渲染器讀取ProjectCategory的中網格標題:

renderer: function(v, p, rec) { 
    return v ? rec.getCategory().get('title') : ''; 
} 

然而,編輯和保存,通過母公司Project記錄時form.updateRecord(record),與Project的「本地」字段不同,相關記錄的字段不會使用服務器響應中的值更新。因此,在更改project_category_id時,即使服務器將使用包含新類別的正確嵌套的ProjectCategory字段進行響應,但getCategory仍將返回舊類別。

爲什麼不是從服務器響應更新,我需要做些什麼來更新它?

我已經發現在商店的write監聽器中,我可以訪問記錄和返回的關聯數據。但我無法弄清楚如何在不觸發任何其他事件的情況下更新記錄。

回答

2

看起來好像我找到了我的解決方案。這增加了Project店:

listeners: { 
    write: function(store, operation, opt) { 
    var c = operation.records[0].getCategory(); 
    c.set(operation.response.result.ProjectCategory); 
    c.commit(true); 
    } 
} 

的關鍵因素是commit(true)通話,這將跳過通知有關更改的存儲/代理。儘管如此,它仍然是一個令人失望的事情,但這並不是自動完成的。

+0

當我嘗試通過關聯getterName從子記錄訪問父記錄時,我遇到了同樣的問題。我注意到父商店中的實際記錄與關聯檢索到的記錄不同。當我檢查每條記錄的ext id屬性(通過'record.id')時,它們顯示不同的值。我確信這有一個原因,但我不明白的是爲什麼所有的屬性(除了'id')可能不匹配。它確實應該是自動的。 – globetrotter 2013-12-06 22:16:41