从应用程序到组件的调度功能事件

时间:2011-05-09 13:15:05

标签: flex actionscript

我需要在main.mxml中通过事件执行comp1.mxml中的函数,我发现很难理解并且无法使其工作。假设,

main.mxml

public function run():void {
//call a function in comp1.mxml
}

并在comp1.mxml中:

public function runComponent():void {

}

在这种情况下是否需要元数据以及如何使其工作?

2 个答案:

答案 0 :(得分:1)

这取决于你想要做什么,但它是如何工作的主要应用程序只是调用它的子项上的公共函数而不是使用事件。

另一种方法是使用像Parsley,RobotLegs或Swiz这样的应用程序框架,这样你就可以做那些“连接”,但在这种情况下可能不太可能。

所以是的,我认为你想要做的是这样的事情:

<s:Application creationComplete="comp.runComponent()">
   <comp:Comp1 id="comp" />
</s:Application>

答案 1 :(得分:0)

事件模型的主要目标是实现Observer pattern以提供组件之间的低耦合。让我们有一个名为main.mxml的组件,其中包含comp1.mxml。所以main.mxml知道comp1.mxml,这是正常的。 main.mxml可以毫无问题地调用comp1.mxml的公共方法。

事件模型使comp1.mxml无法了解main.mxmlmain.mxml订阅comp1.mxml个事件,comp1.mxml触发他们调用main.mxml的方法而不进行耦合。

根据你的问题,你想做一些相反的事情。我认为这不是一个正确的方法。不要使用事件从comp1.mxml调用main.mxml的方法。只需按以下方式直接致电runComponent()

public function run():void {
    myComp1Instance.runComponent();
}