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

时间:2011-06-05 18:16:27

标签: flex components swipe

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

修改

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

1 个答案:

答案 0 :(得分:2)

在另一个视图中运行一个函数(AKA组件)这在很大程度上取决于架构。听起来你想在父母身上运行一个功能。在这种情况下,'封装适当'方法是从component1分派事件;在component1s parent中监听事件;并从事件监听器执行该函数。

因此,在标题栏的父级中的某处,添加事件监听器:

headerbarInstance.addEventListener('parentDoSomething', onHeaderBarToldMeTo);

如果是ActionSCript 3组件,我可能会在构造函数中添加它,如果是MXML组件,我可能会在preinitialize事件处理程序中添加它。 'parent'组件也需要监听器功能:

protected function onHeaderBarToldMeTo(event:Event):void{
  erase();
}

当点击headerbar.mxml中的按钮组件时,会触发标题栏内的点击事件处理程序,它需要调度事件,如下所示:

protected function onButtonInheaderbarClick(Event:Event):void{
 dispatchEvent(new Event('parentDoSomething'));
}

一切都应该神奇地起作用。如果函数不在父项的直接子项中,则可能必须冒泡该事件。

如果您不关心封装,您也可以直接访问父级。所以你的标题栏组件会这样做:

parent.erase();

这很简单直接,应该可行,但从维护的角度来看,它被认为是非常糟糕的做法。