2011-05-09 58 views
0

我將需要通過事件在main.mxml中的comp1.mxml中執行一個函數,我發現很難理解並無法使其工作。假設,從應用程序到組件的調度功能事件

main.mxml

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

,並在comp1.mxml:

public function runComponent():void { 

} 

是元數據需要在這種情況下,如何使它工作嗎?

回答

1

這實際上取決於你想要做什麼,但它的工作原理是主應用程序只是調用其上的公共功能,而不是使用事件。

另一種方法是使用像Parsley,RobotLegs或Swiz這樣的應用程序框架,以便您可以執行這些「連接」,但在這種情況下可能不需要。

所以,是的,我想你想要做的是這樣的:

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

哇!謝謝,想想花了6個小時纔得到一個簡單的答案,不知道這個。你是怎麼知道的? – Jonyang 2011-05-09 13:29:55

+0

這是相當基礎的。這是帶有視圖的OOP(本質上是Flash),但是以xml方式(Flex)完成。 – 2011-05-09 13:44:57

+0

在Flex中也做了很多XML的東西,尤其是MusicXML – Jonyang 2011-05-09 14:09:37

0

事件模型的主要目標是實現Observer pattern提供組件之間的低耦合。讓我們有一個名爲main.mxml的組件,其中包含comp1.mxml。所以main.mxml知道comp1.mxml,這是正常的。 main.mxml可以調用公共方法comp1.mxml沒有問題。

事件模型使我們有可能不知道的comp1.mxmlmain.mxml訂閱了comp1.mxml事件,comp1.mxml發送了他們調用方法main.mxml而沒有耦合。

根據你的問題你想做相反的事情。我認爲這不是一個正確的方法。請勿使用事件從main.mxml調用comp1.mxml的方法。請直接撥打runComponent()以下方式:

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

是的,我錯過了這部分。但你有沒有使用as3signal的經驗? – Jonyang 2011-05-09 13:32:36

+0

我對此沒有實際經驗。就我個人而言,我認爲就AS事件模型而言,沒有理由擁有其他事件模型。無論如何,as3signals具有相同的基本概念(Observer模式的實現)。所以我的答案在使用as3signals時很有價值。 – Constantiner 2011-05-09 13:36:25

+0

我會嘗試DAW工作站,即使RobotLegs更受歡迎,我個人仍然懷疑使用MVC。如果通過單獨的組件進入不同的.mxml/.as可以做同樣的事情嗎? – Jonyang 2011-05-09 13:40:16