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
}