0

Flex Mobile 应用程序中是否有一种方法可以监听 a 中的<s:View>事件<s:ViewNavigator>?假设我有以下应用程序结构:


主要应用:

<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                  xmlns:s="library://ns.adobe.com/flex/spark"
                  creationComplete="databaseConnection(event)">

  <s:ViewNavigator id="tasks" width="100%" height="100%"
                       label="Tasks" firstView="views.TasksView"
                       title="Tasks" icon="@Embed('assets/icons/tasks.png')">
  </s:ViewNavigator>
</s:TabbedViewNavigatorApplication>

view.TasksView:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark">

  <s:Button label="New View" click="{navigator.pushView(views.AddTask)}"/>
</s:View>

视图.AddTask:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark"
                creationComplete="{dispatchEvent(new Event("happened"))}">

  <fx:Metadata>
    [Event(name="happened", type="flash.events.Event")]
  </fx:Metadata>
</s:View>

假设我想happened在我的主应用程序中侦听事件。我怎样才能听到这样的事件?

感谢您的时间。

4

1 回答 1

1

是的,你可以,它可以这样做:

首先在您的应用程序中将此属性添加到您的根标记:

initialize="attachNavigationListeners(event)"

下一个方法将向需要自定义事件的导航器添加一个完整的事件:

private function attachNavigationListeners(event : FlexEvent) : void {
    navigator.addEventListener(Event.COMPLETE,attachViewListeners);
}

然后我们需要在导航器完成时添加视图侦听器,我有这个单独的,所以你可以根据需要在这里拥有尽可能多的视图,可以使用 switch 语句:

private function attachViewListeners(event : Event) : void {
    if(navigator.activeView is FirstView) {
          addListenersToFirstView();
    }
}

将侦听器添加到相关视图:

private function addListenersToFirstView() : void{
    if(navigator.activeView is Firstview) {
          var view: Firstview = navigator.activeView);
          view.addEventListener("happened", handleHappened);
     }
}

最后处理事件:

private function handleHappened(event:Event) : void{
    // I hope something really did happen :)
}

笔记

显然我只是概述了这里需要的所有步骤,我没有提供一个完整的工作示例来复制和粘贴,但是你会知道你在做什么来问这个问题我希望这可以帮助你,你也已经展示了如何从您的视图中分派事件。

我也使用了字符串“happened”,但你会有一个像 CustomEvent.HAPPENED 这样的 const 或适合你的东西,以避免以这种方式使用字符串。

于 2012-05-19T07:34:16.310 回答