Ответ 1
Я думаю, лучшее решение было бы:
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
Возможно ли изменить хранилище сетки в 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()
: -)
Заранее спасибо
Я думаю, лучшее решение было бы:
grid1.on('itemclick', function(view, record) {
grid2.reconfigure(record.products());
);
Вы смотрите на магазины неправильно. Магазин привязан к сетке навсегда, поэтому нет grid.setStore()
. Вы НЕ меняете хранилище для сетки, вместо этого вы меняете DATA в хранилище для этой сетки.
Теперь решение вашей проблемы:. Вы правы с частью, у которой у вас уже есть экземпляр хранилища с вашими данными. то есть; 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());