Окно редактирования и создания записи Grid
Всем привет!
Пытаюсь создать Window, в котором редактировалась бы выбранная строка таблицы. Нашел вот такой пример: http://examples.sencha.com/extjs/6.2...-child-session Все бы замечательно, только есть одно но... там на 2 view используется один и тот же viewController, а создается окно так: this.dialog = view.add({ xtype: 'binding-child-session-form', viewModel: { data: { title: record ? 'Edit: ' + record.get('name') : 'Add Company' }, }, }); this.dialog.show(); }, Кнопка отмены в окне вызывает другую ф-цию этого же ViewController: onCancelClick: function () { this.dialog = Ext.destroy(this.dialog); }, Почему этого же? Есть вот такой комментарий там же в коде: /** * This form is a popup window used by the ChildSession view. This view is * added as a contained window so we use the same ViewController instance. */ При переносе подобного кода к себе в приложение столкнулся с тем, что окно создается лишь поверх таблицы, а не поверх всего приложения/viewport'а, как мне нужно. Выкрутился так: var main = Ext.ComponentQuery.query('app-main')[0]; this.dialog = main.add({ Также прописал себе во view окна тот же ViewController, т к по умолчанию он лез за функциями в main ViewController: controller: 'employees', Только вот теперь при закрытии окна `this.dialog` у меня `undefined` и обратиться к созданному диалогу я не знаю как. Можно нагородить еще ComponentQuery, но хочется нормального приятного решения. Сенча по умолчанию предлагает создать ViewController еще и для окна и часть кода разместить там. Можно ли решить проблему, используя лишь один ViewController как в примере, на который я дал ссылку? |
Попробуйте в первом примере сделать окно модальным.
|
Цитата:
modal: true, А при создании с xtype вся конфигурация и вызывается. |
Наконец добрался поковырять код и понять, почему эта конструкция у вас не срабатывает. А не работает она потому, что для плавающих компонентов маску создаёт ZIndexManager, который не учитывает наличие даже чуть нетривиальных случаев. У меня давно висит тикет переделать этот механизм на использование LoadMask, но руки пока не добрались.
В общем, штатными средствами не получится. Самый простой вариант: перед показом окна вручную набрасывать маску на тело документа, перед закрытием окна её снимать. Примерно так: ... var win = new MyApp.view.GridWindow(); Ext.getBody().mask(); win.show(); ... Ext.getBody().unmask(); win.close(); |
А какую проблему решает данный код? Ведь если мы создаем форму через new или create, она итак будет поверх body.
Сейчас я упростил код до такой конструкции: this.dialog = Ext.create({ xtype: 'employees-window', Работает как нужно, только окно так и НЕ является дочкой Grid'а, что я хочу реализовать. |
Часовой пояс GMT +3, время: 18:22. |