ExtJS4.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
に自分のプロパティを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
たが、アソシエーションデータの非同期リクエストでコールバックを実行しても、アソシエーションによってロードされたデータにアクセスできません。
最終的には、自分から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
これは非常に簡単に実行できるはずです。何が足りないの?
御時間ありがとうございます!