我正在使用 ExtJS 4.1.0
假设我有几个简单的模型通过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.. */
});
现在,如果我希望在实例化模型时自动设置contents
my 的属性怎么办?作为临时解决方案,我在模型中添加了以下方法:App.model.Order
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
这似乎应该很容易完成。我错过了什么?!
谢谢你的时间!