我有一个headerbar.mxml,当我的应用中的用户swipes_down显示时。 headerbar.mxml包含一个我想在主应用程序窗口中运行erase()的按钮组件。主应用程序是一个包含erase()的绘图应用程序。我只是不知道如何从另一个mxml视图文件中调用函数。我认为它会像click =“{mainwindow.drawPanel.erase()}”;
修改
protected function onColorChange(event:List):void{
appHome.drawArea.erase();
}
答案 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();
这很简单直接,应该可行,但从维护的角度来看,它被认为是非常糟糕的做法。