Sencha Ext JS: почему меню привязываются к окну просмотра, а не к экземпляру вида? - PullRequest
0 голосов
/ 12 февраля 2020

Эй, я новичок в Ext JS разработка и разработка в целом. Я все еще учусь в колледже, и в настоящее время я пытаюсь создать пользовательский интерфейс для веб-приложения, созданного в Ext JS, и у меня возникли некоторые проблемы с меню и тем, как они работают. Я почти уверен, что что-то упускаю, и должен быть простой способ сделать то, что я собираюсь сделать с меню.

Если быть точным c У меня есть 2 меню в моем приложении, и они оба вызывают у меня одну и ту же проблему ... Первый использует код из этого примера: https://examples.sencha.com/extjs/6.7.0/examples/kitchensink/?modern#menus

, у него есть несколько полей, которые при изменении должны обновить основной вид. .. проблема здесь в том, что меню присоединяется к окну просмотра

this.topMenu = Ext.Viewport.setMenu(this.getMenuCfg('top'), {
            side: 'top'
        });

, который устанавливает область действия слушателей полей, которые находятся внутри меню, в область просмотра вместо контроллера экземпляров представлений, который затем затрудняет доступ к фактическим компонентам, которые я искал в моем главном представлении, или даже к загрузке хранилищ из модели представления, прикрепленной к моему основному представлению.

фактически мне пришлось перепроектировать его с помощью отладчика, чтобы затем найти этот crypti c путь к моему магазину:

var me = this,
    vm = me.getViewModel().children["generated-cryptic-name-of-my-model-1"],
    myStore = vm.getStore('MyStore');

и, конечно, проблема также работает наоборот ... внутри методов, запущенных из контроллера моего основного представления I я не смогу найти ссылки компонентов внутри меню с помощью

this.lookupReference('reference')

, вместо этого мне пришлось снова найти довольно неинтуитивный способ доступа к своим компонентам, дав им идентификатор. Опять же, я нашел это только с помощью отладчика ... это выглядит так:

var me = this,
    menuItems = me.topMenu.getActiveItem().getItems(),
    fieldset = menuItems.getByKey('fldSet'),
    myField = fieldset.getItems().getByKey('myField');

, потому что сначала я использовал только 1 меню во всем своем приложении, я видел это как своего рода технический долг, и я не стал по-настоящему углубиться в это, потому что я нашел обходной путь.

Но теперь я добавил другое меню, на этот раз в разделенную секцию кнопки SplitButton, как показано в Документах (https://docs.sencha.com/extjs/6.7.0/modern/Ext.SplitButton.html )

и снова меню присоединяется к окну просмотра вместо представления экземпляра, что вызывает запуск функций обработчика в viewportcontroller и позволяет найти ссылки на мои компоненты внутри представлений экземпляра с помощью this.lookupReference('reference') .

Я могу заставить обработчики срабатывать на правильном контроллере, установив конфигурацию контроллера для меню при создании экземпляра, но я не нашел простого способа получить ссылки на мои компоненты, и это действительно меня беспокоит Точка ...

Я хотел бы услышать ваши предложения, ура;)

1 Ответ

0 голосов
/ 18 февраля 2020

Вероятно, было бы полезно узнать, какие существуют виды, контроллеры представления и модели представления. Код vm = me.getViewModel().children["generated-cryptic-name-of-my-model-1"] заставляет меня подозревать, что в нем задействовано больше view-моделей и view-контроллеров, и это помогло бы узнать их отношения. Я не удивлюсь, если меню не проблема вообще ...

...