Подтвердить что ты не робот

ExtJS 4 Изменить хранилище сетки на лету

Возможно ли изменить хранилище сетки в ExtJS 4?

Например, у меня есть две модели:

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

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

и две сетки. Первая сетка связана с Store, которая использует модель User и загружает вложенные данные json из бэкэнд, например

{
  users: [{
     id: 1,
     products: [
       {id: 1},
       {id: 2}
     ]
  }, {
     id: 2,
     products: [
       {id: 3},
       {id: 4},
       {id: 5}
     ]
  }]
}

Все, что я хочу получить, - это когда вы нажимаете на строку в первой сетке, вторая сетка должна показывать продукты пользователя без подключения к серверу. Все, что я знаю, это то, что user.products(); возвращает объект Ext.data.Store. Таким образом, идея состоит в том, чтобы изменить второй магазин сетки на user.products();, но нет такого метода grid.setStore(): -)

Заранее спасибо

4b9b3361

Ответ 1

Я думаю, лучшее решение было бы:

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

Ответ 2

Вы смотрите на магазины неправильно. Магазин привязан к сетке навсегда, поэтому нет grid.setStore(). Вы НЕ меняете хранилище для сетки, вместо этого вы меняете DATA в хранилище для этой сетки.

Теперь решение вашей проблемы:. Вы правы с частью, у которой у вас уже есть экземпляр хранилища с вашими данными. то есть; user.products(). Тем не менее, вам нужно будет создать магазин для вашей сетки. Однако у этого магазина не будет никаких данных. Теперь, когда вам нужно отображать информацию о продуктах, вам необходимо загрузить хранилище сетки с данными. Вы можете использовать:

  • Нагрузка()
  • LoadData()
  • loadRecord()

для загрузки данных в ваш магазин. В вашем случае вы можете сделать следующее:

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

Ответ 3

Если вы хотите привязать хранилище к сетке после создания сетки, вы можете использовать метод bindStore().

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

В качестве альтернативы вы также можете использовать методы load(), loadData(), loadRecords() и скопировать данные в ваш магазин.

Ответ 4

Ответ Abdel Olakara помог мне, когда мне нужно было обновить данные о чем-то, у которого не было reconfigure (пользовательский класс наследует от Ext.form.FieldSet).

Но вам не нужно указывать addRecords или диапазон для getRange, потому что по умолчанию мы рассмотрели в этом случае.

Это означает, что вы можете:

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