自動填充一個模型屬性我使用ExtJS的4.1.0ExtJS的通過關聯
說我有幾個簡單的模型通過hasMany
協會連接。該模型代表的訂單和訂單內容...
Ext.define('App.model.Order',
{
extend: 'Ext.data.Model',
fields: ['id', 'order_date', 'order_total', 'contents' ],
associations: [{
type : 'hasMany',
model : 'App.model.OrderContents',
name : 'getContents', /** magic method */
primaryKey : 'id',
foreignKey : 'order_id',
autoLoad : false
}],
/** Proxy Definition here.. */
});
Ext.define('App.model.OrderContents',
{
extend: 'Ext.data.Model',
fields: ['id', 'order_id', 'item_id' ],
/** Proxy Definition here.. */
});
現在,如果我想我的App.model.Order
的contents
屬性時Order
模型實例被自動設置什麼?對於臨時的解決方案,我已加入下列方法將Order
模型:
Ext.define('App.model.Order',
{
/** Model definition ... */
loadContents: function()
{
this.getContents().load({
callback: function()
{
this.set('contents', arguments[0]);
},
scope: this
});
}
});
爲了有一個Order
對象與內容容易獲得的,我必須執行以下操作:
var myOrder = new App.model.Order({id:1, order_date:'12-15-2012', order_total:100});
myOrder.getData(true); // contents will be null
myOrder.loadContents();
myOrder.getData(); // contents will be an array of OrderContents
我有嘗試重載構造函數App.model.Order
,但無論如何,即使我對關聯數據的異步請求執行回調,我也無法訪問由關聯加載的數據。
最終,我希望能夠從我的App.store.Orders
中檢索訂單,並且檢索到的記錄已經有了它的contents
屬性集,但我無法弄清楚它!如果我從商店檢索記錄如下:
myStore = Ext.getStore('OrderStore');
myOrder = myStore.findRecord('id',1);
myOrder.getData(); // contents will be null
myOrder.loadContents();
myOrder.getData(); // contents will be an array of OrderContents
我真的只是想削減不必.loadContents()
在整個我的應用程序的App.model.Order
每個實例;這似乎應該很容易完成。我錯過了什麼?!
謝謝你的時間!
我不相信模型的火'負載'事件? http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data。模型 –
我已經更新了我的答案。看看它。 – lontivero
對不起@lontivero的反應遲鈍,這看起來像一個優雅的解決方案。爲了我的需要,我重載了包含我的訂單的商店的構造函數。該方法遍歷每個加載的記錄並調用我的'loadContents'方法,然後依次填充對象的「contents」屬性。反過來,每當我從訂單的商店檢索訂單時,它都會加載其內容。再次感謝您的寶貴意見和解決方案! –