Этот код выглядит странно. Много чего лишнего.
Ext.define('JournalApp.view.notes.Note', { extend: 'Ext.grid.Panel', //'Ext.panel.Panel',// noteStore: null, initComponent: function() { this.callParent(); this.noteStore = Ext.getStore('JournalApp.store.NoteStore'); this.on('render', this.loadStore, this); }, loadStore: function() { this.noteStore.load({ scope: this, params: { orderid: 'тут ид родителя таблицы, но как получить?' } }); }, Запись noteStore: null, не нужна, так как в гриде и так есть store. Незачем делать дубликат. Запись this.noteStore = Ext.getStore('JournalApp.store.NoteStore'); вообще не нужна. Все работает и без нее. Нужно store задавать как и полагается: store: {type: "алиас сторе"} Запись this.on('render', this.loadStore, this); не нужна, можно просто store сделать autoload Проблема " ид родителя таблицы, но как получить?" не решаемая, ибо не виден контекст использования этого кода. Нужна песочница. Сделай те пример. |
Цитата:
|
Сначала всё правильно, когда кликаем по "ордерам" в левой части, то открывается закладка "Ордера", где находится перечень всех ордеров в виде таблицы, но там только таблица с ордерами, таблица с "заметками", находится исключительно в самом ордере. Чтобы добраться до таблицы заметок, надо открыть ордер.
Каждая заметка принадлежит конкретному ордеру, поэтому при load() нужно знать ИД ордера, чтобы получить заметки для конкретного ордера, а не все что есть. Так же при редактировании. Для таблицы "Заметки" я сделал отдельный store, потому что часто будет так что в самом ордере будут добавляться только заметки, а остальные поля не будет затронуты, соответственно нет необходимости из за одной строки, гонять на сервер все 20 полей, которые ещё будет добавлены. (На картинке только малая часть, что я пока добавил.) Мне кажется так правильней в моем случае и даже не думал что возникнут проблемы. Получается, после открытия закладки с конкретным ордером, он будет сам по себе слать данные на сервер, не затрагивая заметки, ну и заметки то же будут сами по себе. И когда произойдет добавление строки в таблицу заметок, то ордер на сервер ничего не пошлет. Как применять links я к сожалению не понял, поэтому чтобы передать данные в форму конкретного ордера, данные из строки таблицы "ордеров" сохраняются в переменную singleOrder и от туда форма заполняет свои поля. Я думал что links это что-то намертво прописанное в ViewModel, сделал вывод такой из примеров, где всегда прописаны конкретные данные. Надо пересмотреть это дело. К сожалению, данные в таблицу заметок должны грузиться при открытии ордера. Т.е. открывается закладка конкретного ордера и таблица заметок заполняется, заметками для открываемого ордера. Цитата:
|
Цитата:
Цитата:
Цитата:
{ xtype: 'noteGrid', fieldLabel: 'Заметки:', viewModel: { type: 'order' }, bind: { store: '{notes}' }, } Цитата:
Я когда задумал это дело, то рассчитывал, что при открытии формы, в которую вложена таблица заметок, то при её создании я передам в store фильтр с ИД ордера и затем произойдет autoload и всё будет как в сказке. Но в реальности autoload вызывается при открытии приложения, само собой без нужного ИД, а при открытии формы, где находится таблицы, которую надо загрузить, никакого autoload не происходит. Поэтому весь этот код в initComponent. |
Цитата:
Этот код: { xtype: 'noteGrid', fieldLabel: 'Заметки:', viewModel: { type: 'order' }, bind: { store: '{notes}' }, } нужно переписать так: { xtype: 'noteGrid', fieldLabel: 'Заметки:', viewModel: { type: 'order', stores: { notes: { type: "notes" } } }, bind: { store: '{notes}' }, } Причем до этого должен быть загружен сторе с алиасом "store.notes" (внимание!!!, нужно загружать сам КЛАСС сторе, например достаточно в приложении его прописать в stores или просто через require подгрузить класс). Цитата:
|
Цитата:
1) открытие формы нужно поменять на СОЗДАНИЕ формы и создание всего что в ней 2) автолоад нужен 3) сторе нужно подключать через алиасы, тогда автолоад будет работать не при создании приложения, а при создании формы (аля создании сторе) |
для лучшего понимания создайте код в песочнице
|
Пытаюсь, но там не меньше сложностей чем в реальном проекте. Уже не один раз пробовал, но пробиться через кучу ошибок не могу. Вот для данной проблемы пробую, но получаю ошибку, которая для меня мало информативна. Если не сложно гляньте, может поможете через проблемы песочницы пробраться, чтобы решить реальную. :)
https://fiddle.sencha.com/#fiddle/p53 Цитата:
|
вот исправленный вариант https://fiddle.sencha.com/#fiddle/p55
Файл переименовал orders -> orders.json (точнее прописал URL прямо на вкладке открытого файла, ибо просто переименование почему-то у них не работает...) Дописал прокси УРЛ: Ext.define('Fiddle.model.OrderModel', { extend: 'Fiddle.model.Base', fields: [ 'id', 'description' ], proxy: { // дописал url: "orders.json" } }); в классе Fiddle.view.Main дописал: viewModel: { type: 'order', stores: { // дописал orders: { model: "Fiddle.model.OrderModel" } } }, в классе Fiddle.view.Main расскомментировал: store: '{orders}' |
Цитата:
но код надо делать маленький, чтобы локализовать ошибку иначе очень сложно помогать... времени в обрез. |
Часовой пояс GMT +3, время: 07:33. |