Селектор ComponentQuery только для дочерних элементов - PullRequest
1 голос
/ 23 марта 2012

У меня есть набор Controller / View, который составлен динамически, у каждого есть список «селектор» и «контейнер», у такого контейнера может быть другая пара селектор + контейнер и так далее.Которые являются экземплярами того же корневого селектора + Контроллер контейнера.

Это определение заголовка Контроллера (абстрактный класс):

Ext.define('MyApp.controller.explorer.Base', {
    extend: 'Ext.app.Controller',
    refs: [
        {ref: 'explorerContainer', selector: '[itemId="explorerContainer]'},
        {ref: 'explorerSelector', selector: '[itemId="explorerSelector]'}
    ],

Дело в том, что я не знаю, чтодолжен быть селектором ComponentQuery, чтобы соответствовать только дочерним элементам моего контроллера с таким itemId.Потому что, используя [itemId = "explorerContainer"] для сопоставления компонента, он делает это глобально, отвечая на самый верхний контейнер в дереве композиции.

В предыдущих экспериментах с ExtJS 3 я обращался к дочерним элементам с помощьюmyComponent.getComponent ('...'), но теперь нет getComponent (), и я не могу найти эквивалент в ExtJS 4.

Заранее спасибо.

Ответы [ 3 ]

7 голосов
/ 24 марта 2012

Вы смешиваете немного контроллеров с представлениями в вашем вопросе.Например, «дочерние элементы моего контроллера».Контроллер не является компонентом - просто наблюдатель событий.Представления имеют дочерние компоненты и т. Д.

Вам нужно немного ближе познакомиться с Ext.ComponentQuery классом.Вы можете поэкспериментировать с ним в Firebug на вашем приложении или на демонстрационных страницах.Вы просто открываете консоль firebug и набираете Ext.ComponentQuery.query('panel') - затем заменяете панель тем, что, по вашему мнению, является правильным выражением, и тестируйте его.Если вы установите плагин Illuminations For Developers - вы получите компоненты Ext вместо общих объектов JS - это чрезвычайно полезно.

Документы имеют несколько примеров запросов: http://docs.sencha.com/ext-js/4-0/#!/api/Ext.ComponentQuery.Вы найдете, что символ ">" ограничивает запрос непосредственными дочерними элементами.

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

1 голос
/ 28 января 2013

Вы можете просто сделать component.query ('селектор'), чтобы запросить поддерево, начиная с вашего компонента.

0 голосов
/ 26 марта 2012

Чтение документации Ext.ComponentQuery. Я нашел ее внизу:

"Для быстрого доступа к запросам, основанным на конкретном контейнере, см. Ext.container.Container.query, Ext.container.Container.down и Методы Ext.container.Container.child. Также см. Ext.Component.up. "

Итак Ext.container.ContainerView (xtype: container ) реализует child ( [selector] ) , который отвечает на первый дочерний элемент, соответствующий строковому аргументу селектора.

http://docs.sencha.com/ext-js/4-0/#!/api/Ext.container.Container-method-child

Это именно то, что я искал.

...