Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex 4,一个自定义组件的多个实例侦听父组件的同一事件_Apache Flex_Events_Multiple Instances - Fatal编程技术网

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

Apache flex Flex 4,一个自定义组件的多个实例侦听父组件的同一事件,apache-flex,events,multiple-instances,Apache Flex,Events,Multiple Instances,简而言之: 我需要一个自定义组件中的事件侦听器,以便它的所有实例(不编辑它们)都能同时响应,由其父容器中的已调度事件触发 详细信息: 我有一个带有选项卡导航器的自定义组件。(这些选项卡用于显示不同语言的不同首选项。) 我有一个按钮栏,上面有所有语言的按钮 自定义组件有很多实例 我想点击语言栏的一个按钮,将所有实例切换到同一个选项卡(自定义组件包含更改选项卡的逻辑) 我可以通过为自定义组件的每个实例添加事件侦听器来实现,这样它就调用了一个内部函数来更改选项卡。但它似乎是非常耦合的,不是吗 我想

简而言之:

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

详细信息:

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

  • 我有一个按钮栏,上面有所有语言的按钮

  • 自定义组件有很多实例

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

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

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

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

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


提前感谢您

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

我需要一个自定义的事件侦听器 组件的所有实例 (不编辑它们)在 同时,由已调度事件触发 在其父容器中

根据定义,您想要做的事情就是破坏封装。在理想情况下,组件不应该知道它的父组件。如果组件需要与其父组件通信,它应该调度一个事件。如果父级需要与子级通信,则应调用该子级上的公共方法(或更改公共属性)。从封装的角度来看,我不能建议子系统侦听父系统上的事件

我想按一下 语言栏,获取所有 实例切换到同一选项卡 (自定义组件包含 更改选项卡的逻辑)

因此,然后为按钮放置一个单击处理程序,并执行如下操作:

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

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

-1因为这个答案似乎根本没有解决用户的问题。使用MVC框架将如何帮助他解决这个问题?感谢您的回答和封装背景。但是,如果我的自定义组件真的像一个黑匣子,当它听到一些东西时会做出响应,那么它不是“更加封装”了吗?在我的下一次重构中,我想将主按钮栏隔离在它自己的组件中,这样它就不再是组件的父级…@Miguel L.Barco您的组件实际上应该像一个黑匣子。具有一组定义的输入(方法和属性)和一组定义的输出(事件)。组件应该只侦听它的子组件上的事件,而不是父组件上的事件。如果组件想在其子组件上执行操作,则应通过更改属性或调用方法来执行。监听父级事件只会破坏封装。
public function onClick():void{
  myCustomTabNavigator1.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
  myCustomTabNavigator2.selectedIndex = 1 
}