Flex 4,自定义组件的多个实例侦听父级的同一事件

时间:2011-01-28 11:53:40

标签: flex events multiple-instances

简而言之:

我需要一个自定义组件中的事件监听器,因此它的所有实例(不编辑它们)会同时响应,由其父容器中的调度事件触发。

详细信息:

  • 我有一个带有Tab导航器的自定义组件。 (选项卡旨在显示不同语言的不同首选项。)

  • 我有一个带有所有语言按钮的按钮栏。

  • 自定义组件有很多实例。

我想单击语言栏的按钮并将所有实例切换到相同的选项卡(自定义组件包含更改选项卡的逻辑)。

我可以通过为自定义组件的EACH INSTANCE添加事件侦听器来实现,因此它调用一个更改选项卡的内部函数。但它似乎非常耦合,不是吗?

我想知道它是否可以在组件的主CLASS中完成,因此它会监听其父容器中的事件,无论它是哪一个。

在我看来这个代码应该工作,但它没有(显然不会使用自定义事件传递新语言值):

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

这样我就可以删除组件的一个实例,看看它是否适合自己。

提前谢谢

2 个答案:

答案 0 :(得分:3)

  

我需要在自定义中使用事件监听器   组件所以它的所有实例   (没有编辑它们)反应   同时,被派遣的事件解雇了   在其父容器中。

根据定义,你想做的事情打破了封装。在一个理想的世界中,一个组件应该不知道它的父级。如果组件需要与其父进程通信,则应分派事件。如果父母需要与孩子沟通,则应该对该孩子称为公共方法(或更改公共财产)。从封装的角度来看,我不建议孩子听父母的事件。

  

我想点击按钮   语言栏并获得所有   实例切换到相同的选项卡   (自定义组件包含   改变标签的逻辑。)

然后,然后为按钮添加一个单击处理程序,并执行以下操作:

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

如果您引用了selectedItem,也可以设置它。 ,如果您在数组中有自定义TabNavigators,则可以循环它们。如果自定义TabNavigators是自定义组件的子项,则可以在该自定义组件中创建一个方法来设置默认值并在每个组件上调用该方法,而不是直接设置selectedIndex。

答案 1 :(得分:-1)