Flex Mobile在<s:view> </s:view>中侦听事件

时间:2012-05-19 03:34:58

标签: android ios flash flex flex4

Flex Mobile应用程序中是否有办法监听<s:View>的{​​{1}}范围内的事件?我们假设我有以下应用程序结构:


主要应用:

<s:ViewNavigator>

view.TasksView:

<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.AddTask:

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

说我想在我的主应用程序中监听<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> 事件。我怎么能听到这样的事件?

感谢您的时间。

1 个答案:

答案 0 :(得分: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 :)
}

注意

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

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