Flex 4, несколько экземпляров пользовательского компонента, прослушивающего одно и то же событие родителя - PullRequest
1 голос
/ 28 января 2011

Короче говоря:

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

Подробно:

  • У меня есть пользовательский компонент с навигатором по вкладкам.(Вкладки предназначены для отображения различных настроек для разных языков.)

  • У меня есть панель кнопок с кнопками для всех языков.

  • Существует множество экземпляров пользовательского компонента.

Я хочу нажать кнопку на панели языков и переключить ВСЕ экземпляры на одну и ту же вкладку (пользовательский компонент содержитлогика для изменения вкладки).

Я могу сделать это, добавив прослушиватель событий для КАЖДОЙ ИНСТАНЦИИ пользовательского компонента, поэтому он вызывает внутреннюю функцию, которая изменяет вкладку.Но, похоже, он очень связан, не так ли?

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

По моему мнению, этот код должен работать, но он не (очевидно, не использует пользовательское событие для передачи нового значения языка):

this.parent.addEventListener("lang_change", this.change_tab);

Таким образом, я могу просто отбросить экземпляркомпонента, и убедитесь, что он работает на себя.

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

Ответы [ 2 ]

3 голосов
/ 28 января 2011

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

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

Я хочу нажать кнопку на панели языков и переключить ВСЕ экземпляры на одну и ту же вкладку (пользовательский компонент содержит логику для изменения вкладки).

Итак, поместите обработчик щелчка для кнопки и сделайте что-то вроде этого:

public function onClick():void{
  myCustomTabNavigator1.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
}

Вы также можете установитьselectedItem, если вы ссылаетесь на него., Если у вас есть пользовательские TabNavigators в массиве, вы можете зациклить их.Если пользовательские TabNavigators являются дочерними по отношению к вашему пользовательскому компоненту, вы можете создать метод в этом пользовательском компоненте, чтобы установить значения по умолчанию и вызвать этот метод для каждого компонента, вместо того, чтобы устанавливать selectedIndex напрямую.

0 голосов
/ 28 января 2011

Я думаю, вы должны использовать какую-то модель MVC, например: Cairngorm

http://code.google.com/p/swizframework/

http://www.robotlegs.org/

http://puremvc.org/

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