0

<s:View>Flex Mobileアプリケーション内で、内にあるイベントをリッスンする方法はあり<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>

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のような定数、またはこの方法で文字列を使用しないようにするのに適したものがあります。

于 2012-05-19T07:34:16.310 に答える