1

简而言之:

我需要一个自定义组件中的事件侦听器,以便它的所有实例(无需编辑它们)同时做出反应,由其父容器中的调度事件触发。

详细地:

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

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

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

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

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

我想知道它是否可以在组件的主 CLASS 中完成,因此它在其父容器中侦听事件,无论它是什么。

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

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

这样我就可以删除组件的一个实例,并看到它自己工作。

先感谢您

4

2 回答 2

3

我需要一个自定义组件中的事件侦听器,以便它的所有实例(无需编辑它们)同时做出反应,由其父容器中的调度事件触发。

根据定义,你想做的事情就是打破封装。在理想的世界中,组件不应该知道它的父级。如果组件需要与其父级通信,它应该调度一个事件。如果父母需要与孩子沟通,它应该调用该孩子的公共方法(或更改公共属性)。从封装的角度来看,我不能建议孩子在父母身上监听事件。

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

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

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

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

于 2011-01-28T13:06:57.363 回答
-1

我认为您应该使用一些 MVC 模型,例如: Cairngorm

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

http://www.robotlegs.org/

http://puremvc.org/

于 2011-01-28T12:44:48.877 回答