ExtJS 4でグリッドのストアを変更することは可能ですか?
たとえば、2つのモデルがあります。
_User = Ext.define('User',{
extend: 'Ext.data.Model',
[...],
hasMany: 'Product'
});
Product = Ext.define('Product',{
extend: 'Ext.data.Model',
[...]
});
_
そして2つのグリッド。最初のグリッドはUser
モデルを使用し、ネストされたjsonデータをバックエンドからロードするストアにリンクされています。
_{
users: [{
id: 1,
products: [
{id: 1},
{id: 2}
]
}, {
id: 2,
products: [
{id: 3},
{id: 4},
{id: 5}
]
}]
}
_
取得したいのは、最初のグリッドの行をクリックすると、2番目のグリッドにサーバーに接続せずにユーザーの製品が表示されることです。私が知っているのは、user.products();
が_Ext.data.Store
_オブジェクトを返すことだけです。したがって、2番目のグリッドのストアをuser.products();
に変更することを考えていますが、そのようなメソッドはありませんgrid.setStore()
:-)
前もって感謝します
私はより良い解決策になると思う:
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
あなたは間違った方法で店を見ています。ストアは永久にグリッドに接続されるため、grid.setStore()
はありません。グリッドのストアを変更するのではなく、そのグリッドのストアのデータを変更します。
今、あなたの問題の解決策:あなたはすでにあなたのデータを持つストアのインスタンスを持っている部分で正しいです。すなわち; user.products()
。それでも、グリッド用のストアを作成する必要があります。ただし、このストアにはデータはありません。製品情報を表示する必要がある場合、グリッドのストアにデータをロードする必要があります。次を使用できます。
ストアにデータをロードします。あなたの場合、次のことができます:
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
グリッドの作成後にストアをグリッドにアタッチする場合は、 bindStore() メソッドを使用できます。
var store = user.products();
grid.getView().bindStore(store);
または、load()、loadData()、loadRecords()メソッドを使用して、ストアにデータをコピーすることもできます。
Abdel Olakaraの回答は、reconfigure
(Ext.form.FieldSet
)。
ただし、addRecords
またはgetRange
の範囲を指定する必要はありません。このケースではデフォルトがカバーされているためです。
これは、次のことができることを意味します。
myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());