Создание связей между хранилищами в памяти
Я создал два хранилища. Указал связь один-ко-многим (hasMany: "Detail"). Указал что они связываются через поле "pid" хранилища "detailStore" ({ name: "pid", reference: "Master" }).
Вопрос, где прописать связь двух существующих хранилищ? Вот код (песочница https://fiddle.sencha.com/#fiddle/1735): var proxy = { type: "memory", reader: { type: "json" } }; Ext.define("Master", { extend: "Ext.data.Model", fields: ["id", "title"], hasMany: "Detail" }); Ext.define("Detail", { extend: "Ext.data.Model", fields: ["id", { name: "pid", reference: "Master" }, "title"] }); var masterStore = Ext.create("Ext.data.Store", { proxy: proxy, model: "Master", data: [ { id: 1, title: "Группа 1" }, { id: 2, title: "Группа 2" }, { id: 3, title: "Группа 3" } ] }); var detailStore = Ext.create("Ext.data.Store", { proxy: proxy, model: "Detail", data: [ { id: 1, pid: 1, title: "Запись 1" }, { id: 2, pid: 1, title: "Запись 2" }, { id: 3, pid: 1, title: "Запись 3" }, { id: 4, pid: 2, title: "Запись 4" }, { id: 5, pid: 2, title: "Запись 5" }, { id: 6, pid: 2, title: "Запись 6" } ] }); console.log(masterStore.getAt(1).details().getCount()); // Выдает нуль, хотя записей там три на каждую группу. |
Логично, вы же связали модели, а не сторы. Мне кажется тут надо в сторону сесии смотреть, но я в ней не силен (
|
Это об этом речь?
http://docs.sencha.com/extjs/6.0/6.0...t.data.Session |
ну да, хочу сторы связать. Чтобы в ОЗУ образовалась некоторое подобие базы данных. А то, ощущение, что все эти модели направлены лишь на отображение баз данных сервера на клиенте. А мне как-то нужно создать модель, которая будет только на клиенте.
|
Спрошу здесь...
Не скажу что проблема общая. У меня скорее проблема с понимаем создания связей. Смотрю на этот пример и не понимаю почему во View в самом низу bind так описывают: bind: '{customerGrid.selection.orders}', откуда orders и почему именно orders. Друзья, поясните на пальцах как правильно создать связь один-ко-многим. Читал документацию, путаюсь. |
Я так понимаю что customerGrid.selection это экземпляр Ext.data.Model, а функция customerGrid.selection.orders() выдает на выходе экземпляр хранилища. А при помощи bind, если не указано свойство, в гриде происходит связка с опцией grid.store. То есть, вместо
bind: '{customerGrid.selection.orders}', можно записать bind: { store: '{customerGrid.selection.orders}' }, .orders() появляется похоже, если в модели прописать reference: { parent: 'Customer' } Правда я не знал что такое возможно. Ибо это прописано в модели KitchenSink.model.Order. А функция добавляется в модель KitchenSink.model.Customer. В общем у них такая навороченная кухня и толкового описания даже на англ нету. |
ну так что, никто не знает как сделать связи между хранилищами? Сессии не помогли
задал на оф. сайте может там помогут https://www.sencha.com/forum/showthr...92#post1130292 |
А покажите если можно в фидле, как вы использовали сессию и как она не помогла. Я тоже пытался в свое время, может ваш пример меня вдохновит на новую попытку )
|
Вот так:
var session = Ext.create("Ext.data.Session"); ... var masterStore = Ext.create("Ext.data.Store", { ... session: session, ... } И это дело в обоих сторе прописал. |
Так и я пробовал. Ну тогда надежда на офф. форум.
|
Часовой пояс GMT +3, время: 20:50. |