2012-05-19 34 views
0

在Flex Mobile应用程序中有没有一种方法来侦听<s:View>的事件,该事件在<s:ViewNavigator>之内?比方说,我有如下应用结构:Flex移动侦听事件<s:View>


主要应用:

<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> 

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事件回到我的主应用程序中。我怎样才能听这样的事件?

谢谢你的时间。

回答

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 :) 
} 

注意

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

我也使用了字符串“发生”,但你会有一个像CustomEvent.HAPPENED或类似的东西,以避免使用这种方式使用字符串。