【发布时间】:2012-12-15 17:57:36
【问题描述】:
我正在使用 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.. */
});
现在,如果我希望在实例化 Order 模型时自动设置 App.model.Order 的 contents 属性怎么办?作为临时解决方案,我在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
我真的只是想减少在整个应用程序中为App.model.Order 的每个实例使用.loadContents();这似乎应该很容易完成。我错过了什么?!
感谢您的宝贵时间!
【问题讨论】:
标签: javascript extjs extjs4 model-associations