2013-05-21 142 views
2

我不確定這是否可能,但我想在MXML的子組件上添加事件偵聽器。事情是這樣的:在組件的子組件上添加MXML事件偵聽器

我的組件

<s:Group> 
    <s:Button id="myBtn" label="click me" /> 
</s:Group> 

主要應用

<local:MyComponent> 
    <local:myBtn click="doSomething()" /> 
</local:MyComponent> 

我知道我可以在代碼中做到這一點,我只是想知道是否有可能做這在MXML中。如果可能的話,那麼正確的語法是什麼?

回答

1

這是可能的,但需要很多設置。

第一個事件的元數據添加到MyComponent的:

<s:Group> 
    <fx:Metadata> 
     [Event(name="click", type="flash.events.MouseEvent")] 
    </fx:Metadata> 
    <s:Button id="myBtn" label="click me" /> 
</s:Group> 

從理論上講,你應該確保你的組件還調度click事件;然而,由於默認情況下點擊會冒泡,因此您無需爲該事件做任何其他操作。

現在,你的主要組件將顯示在MXML代碼提示的情況下,編譯器不會抱怨:

<local:MyComponent click="doSomething()> 
</local:MyComponent> 

一般來說,我不會建議試圖深入到組件,以便將監聽器關於組件子項發送的事件。這是一個封裝的突破。父組件不應該知道孩子的實現細節。

+1

我的問題是,我有一個有很多按鈕的組件,我想知道哪個按鈕被按下。我用你的冒泡解決方案,然後'切換(event.target)'來檢查按鈕 – Drahcir

+0

這將工作;但在那種情況下;我會建議每個按鈕分派自己的自定義事件類型。這樣你的父母就與一組由孩子定義的API交互;而不是「瞭解」孩子的具體情況。 – JeffryHouser

+0

我知道你的意思,而我之前就是這麼做的。封裝很好,但管理和設置很重要。另外,我不認爲知道組件發送哪些事件以及它具有哪些屬性/子組件(按鈕)之間沒有太大區別。 – Drahcir

相關問題