【问题标题】:MessageHandler captured in various tabs - Flex在各种选项卡中捕获的 MessageHandler - Flex
【发布时间】:2013-06-12 13:29:47
【问题描述】:

该架构基于以下框架的使用:Flex、Cairngorm 和 Parsley。

我在弹出面板中使用带有事件“AdicionarItemVendaMercadoriaEvent”的调度程序:PopupPanel。

我使用 FormPM.as 中的 [MessageHandler] 捕获事件,并将其注入 Form.mxml。 在 Form.mxml 中,我有一个 mx: TabNavigator,每个选项卡都在一个 s: NavigatorContent 内。

事实证明,当有多个打开的选项卡 mx:TabNavigator 时,所有选项卡的所有 Form 中都会捕获 dispatched 事件。

正常操作是捕获派发 PopupPanel 的选项卡的唯一事件,而不是所有选项卡。

请问有什么解决这个问题的建议吗?

感谢您的帮助。

【问题讨论】:

  • 您可以将选项卡引用保存在消息中并在处理程序中检查。
  • 是的,请执行上述操作。另一个稍微更优化的方法是为每个选项卡使用不同的事件type(即:使用AdicionarItemVendaMercadoriaEvent.TAB_ONEAdicionarItemVendaMercadoriaEvent.TAB_TWO 等)。这样,当您发送消息时,只会调用一个 [MessageHandler],而不是全部调用。
  • 标签是在用户点击按钮添加时动态生成的。因此,理想的做法是为每个襟翼生成不同的事件。 @dvdgsng
  • 标签是在用户点击按钮添加时动态生成的。因此,理想的做法是为每个襟翼生成不同的事件。 @SunilD。

标签: actionscript-3 apache-flex flex4.5 cairngorm parsley


【解决方案1】:

使用直接的函数回调怎么样?

当您创建 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

【讨论】:

  • handleResult 是私有的?会不会被PopupPanel 自己捕获?但我想用它们在 FormPM.as 中的属性而不是 PopupPanel 来捕获事件。我将尝试在 PopupPanel 中使用其属性调度一个事件并捕获一个 [CommandResult] 使用的欧芹。 @dannrob
  • 嘿,我已经更新了我的答案,关键是您将函数传递给 PopupPanel 以便启动弹出窗口的表单得到结果,而没有其他人。框架很棒,但有时会使真正的标准函数调用过于复杂!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-27
  • 2011-04-08
  • 2013-08-28
相关资源
最近更新 更多