web-dev-qa-db-ja.com

ExtJS 4グリッドストアを即座に変更

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() :-)

前もって感謝します

25
sunsay

私はより良い解決策になると思う:

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );
36
pllee

あなたは間違った方法で店を見ています。ストアは永久にグリッドに接続されるため、grid.setStore()はありません。グリッドのストアを変更するのではなく、そのグリッドのストアのデータを変更します。

今、あなたの問題の解決策:あなたはすでにあなたのデータを持つストアのインスタンスを持っている部分で正しいです。すなわち; user.products()。それでも、グリッド用のストアを作成する必要があります。ただし、このストアにはデータはありません。製品情報を表示する必要がある場合、グリッドのストアにデータをロードする必要があります。次を使用できます。

  • 負荷()
  • データを読み込む()
  • loadRecord()

ストアにデータをロードします。あなたの場合、次のことができます:

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
20
Abdel Raoof

グリッドの作成後にストアをグリッドにアタッチする場合は、 bindStore() メソッドを使用できます。

var store = user.products();
grid.getView().bindStore(store);

または、load()、loadData()、loadRecords()メソッドを使用して、ストアにデータをコピーすることもできます。

9
Sasha Brocato

Abdel Olakaraの回答は、reconfigureExt.form.FieldSet)。

ただし、addRecordsまたはgetRangeの範囲を指定する必要はありません。このケースではデフォルトがカバーされているためです。

これは、次のことができることを意味します。

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());
3
Nick Knowlson