26

ExtJS 4 でグリッドのストアを変更することは可能ですか?

たとえば、次の 2 つのモデルがあります。

User = Ext.define('User',{
  extend: 'Ext.data.Model',
  [...],
  hasMany: 'Product'
});

Product = Ext.define('Product',{
  extend: 'Ext.data.Model',
  [...]
});

そして2つのグリッド。User最初のグリッドは、モデルを使用し、ネストされた json データをバックエンドからロードする Store にリンクされています。

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

前もって感謝します

4

4 に答える 4

36

より良い解決策は次のとおりだと思います:

     grid1.on('itemclick', function(view, record) {
         grid2.reconfigure(record.products());
     );
于 2011-08-15T16:31:04.400 に答える
21

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

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

  • ロード()
  • データを読み込む()
  • loadRecord()

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

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange(0,myStore.getCount()),{addRecords: false});
于 2011-05-04T16:30:26.697 に答える
9

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

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

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

于 2013-06-18T20:56:49.597 に答える
3

Abdel Olakara の回答は、持っていないものreconfigure(から継承するカスタム クラスExt.form.FieldSet) のデータを更新する必要があるときに役立ちました。

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

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

myStore = user.products();
grid.getStore().loadRecords(myStore.getRange());
于 2012-03-07T22:16:24.700 に答える