Apache flex Flex在另一个视图上执行函数

Apache flex Flex在另一个视图上执行函数,apache-flex,components,swipe,Apache Flex,Components,Swipe,我有一个headerbar.mxml,当用户在我的应用程序中向下滑动时显示。headerbar.mxml包含一个按钮组件,我想在主应用程序窗口中运行一个erase()。主应用程序是一个包含erase()的绘图应用程序。我只是不知道如何从另一个mxml视图文件调用函数。我想它应该是类似于click=“{mainwindow.drawPanel.erase()}” 编辑: protected function onColorChange(event:List):void{

我有一个headerbar.mxml,当用户在我的应用程序中向下滑动时显示。headerbar.mxml包含一个按钮组件,我想在主应用程序窗口中运行一个erase()。主应用程序是一个包含erase()的绘图应用程序。我只是不知道如何从另一个mxml视图文件调用函数。我想它应该是类似于click=“{mainwindow.drawPanel.erase()}”

编辑:

protected function onColorChange(event:List):void{
                appHome.drawArea.erase();
            }

要在另一个视图(也称为组件)中运行函数,很大程度上取决于体系结构。听起来好像您想在父级中运行函数。在这种情况下,“适当封装”方法是从component1发送事件;在组件1的父级中侦听事件;并从事件侦听器执行该函数

因此,在headerbar的父对象中的某个位置,添加事件侦听器:

headerbarInstance.addEventListener('parentDoSomething', onHeaderBarToldMeTo);
如果是ActionSCript 3组件,我可能会将其添加到构造函数中,如果是MXML组件,我可能会将其添加到预初始化事件处理程序中。“父”组件还需要侦听器功能:

protected function onHeaderBarToldMeTo(event:Event):void{
  erase();
}
当单击headerbar.mxml中的按钮组件时,会在headerbar内部触发一个click事件处理程序,该处理程序需要调度事件,如下所示:

protected function onButtonInheaderbarClick(Event:Event):void{
 dispatchEvent(new Event('parentDoSomething'));
}
一切都会神奇地发生。如果函数不在父函数的直接子函数内,则可能必须将事件冒泡

如果不关心封装,也可以直接访问父级。因此,标题栏组件将执行以下操作:

parent.erase();

它简单明了,应该可以工作,但从维护的角度来看,它被认为是非常糟糕的做法

谢谢,如果我只是在另一个视图中引用一个functon,我现在就知道该怎么做了,但是我忘了提到的是,erase()位于我在主appview中实例化的drawArea对象中。因此,我需要在另一个视图中的对象上运行erase()。请看我的编辑。这就是我现在要做的。@Casey Wylde,如果“erase()”是视图子级上的公共方法;然后一旦事件出现泡沫;不要擦除,而是执行“myChild.erase()”。我所说的一切都是正确的。您还可以使用FlexGlobals.topLevelApplication访问顶级应用程序并以这种方式调用函数;但从封装的角度来看,它也被认为是不好的,因为它为组件提供了外部依赖。