2013-06-12 22 views
0

該體系結構基於使用以下框架:Flex,Cairngorm和Parsley。MessageHandler在各個選項卡中捕獲 - Flex

我在popuppanel:PopupPanel中使用帶有事件「AdicionarItemVendaMercadoriaEvent」的調度器。

我通過Form.mxml中的FormPM.as中的[MessageHandler]捕獲事件。 在Form.mxml中,我有一個mx:TabNavigator,每個選項卡都在一個s:NavigatorContent內。

事實證明,當有多個打開的選項卡mx:TabNavigator時,所有選項卡的所有形式都會捕獲調度的事件。

正常操作是捕獲調度PopupPanel的選項卡的唯一事件,而不是所有選項卡。

請解決這個問題的任何建議?

我很感激幫助。

+1

你可以保存消息中的選項卡引用並在處理程序中檢查它。 – dvdgsng

+0

是的,做到了上述。另一個稍微更優化的方法是使用不同的事件'類型'(即:使用'AdicionarItemVendaMercadoriaEvent.TAB_ONE','AdicionarItemVendaMercadoriaEvent.TAB_TWO'等)。這樣,當你發送消息時,只會調用一個[MessageHandler],而不是全部調用它們。 –

+0

當用戶單擊要添加的按鈕時,動態生成選項卡。因此,對每個襟翼產生不同的事件將是理想的。 @dvdgsng – user2478505

回答

0

如何使用直接函數回調?

當你創建你的PopUpPanel時,傳遞一個函數回調,當彈出窗口關閉時你想要執行它。您只需調用該函數,而不是使用事件。即

內FormPM:

public function showPopup():void 
{ 
    var popup:PopUpPanel = new PopUpPanel(); 
    popup.onCompletion = handleResult; 
    PopUpManager.addPopUp(popup, ...); 
} 

private function handleResult(someData:*):void 
{ 
    // My popup has completed.. what do I want to do with the result. 
} 

你可能要考慮的Spicelib 3.0命令框架,並有一個命令,彈出你的面板,然後添加錯誤/成功回調到:http://www.spicefactory.org/parsley/docs/3.0/manual/?page=commands&section=intro

+0

handleResult是私人的嗎?會在PopupPanel中捕獲自己的? 但我想用FormPM.as中的屬性捕獲事件,而不是PopupPanel。 我會嘗試dispacher一個事件及其在PopupPanel中的屬性,並捕獲一個[CommandResult]使用歐芹。 @dannrob – user2478505

+0

嘿,我已經更新了我的答案,問題是你要將你的函數傳遞給PopupPanel,以便啓動彈出框的窗體得到結果,而不是其他人。框架非常棒,但有時過分複雜的是真正的標準函數調用! – dannrob

+0

問題解決了,感謝所有的幫助。 – user2478505

相關問題