4

試してみましたが、TabbedMobileApplicationのViewNavigator間でデータを渡す方法を理解するのに苦労しています。

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

    <s:ViewNavigator id="nav1" label="Nav1" firstView="views.Nav1Home" width="100%" height="100%"/>
    <s:ViewNavigator id="nav2" label="Nav2" firstView="views.Nav2Home" width="100%" height="100%"/>

</s:TabbedMobileApplication>

nav1とnav2の間でデータを渡すにはどうすればよいですか?ナビゲーションビューの間にそれを行う方法を知っています。

ありがとう、B。

4

5 に答える 5

2

すでに説明したものよりも、より緩く結合された通信メカニズムを好むことを付け加えたいと思います。私は、分離されたコンポーネントがお互いを知らずにメッセージを送信する、ある種のイベント集約システムを好みます。

このタイプの総合馬術システムは、ParselyやRobotLegsなどの軽量フレームワークに組み込まれています。

これは主にスタイルの問題ですが、私の経験では、このようにコミュニケーションを緊密に結合すればするほど、将来的にはより多くの費用を支払うことになります。

思考の糧だと思います。:)

于 2011-02-13T03:26:51.980 に答える
2

簡単な方法は、ViewNavigatorを使用してデータオブジェクトをビューに追加することです。次に、子ビューで、これを使用してデータを取得します。

this.parentDocument.yourDataObject
于 2011-05-03T03:13:57.357 に答える
1

ここで何かが足りない場合を除いて、ここでスクリプトブロックを実行し、ViewNavigatorでイベントをリッスンします。次に、イベントのハンドラーで、対象のViewNavでパブリック関数を呼び出します。

<s:TabbedMobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" creationComplete="init()">
    <fx:Declarations>
    </fx:Declarations>

    <fx:script><![CDATA[
        private function init():void{
               nav1.addEvenListener(CustomEvent.DATA, onData);
        }

        private function onData(ev:CustomEvent):void{
               nav2.setData(ev.data);
        }
    ]]></fx:script>



    <s:ViewNavigator id="nav1" label="Nav1" firstView="views.Nav1Home" width="100%" height="100%"/>
    <s:ViewNavigator id="nav2" label="Nav2" firstView="views.Nav2Home" width="100%" height="100%"/>

</s:TabbedMobileApplication>
于 2011-02-12T12:39:49.960 に答える
1

TJはすでにそれを正しく理解しています。誰かが同じ問題を抱えている場合に備えて、最後の例を投稿するだけです。

TestApplication.mxml

<s:TabbedMobileApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                       xmlns:s="library://ns.adobe.com/flex/spark"
                       creationComplete="init()">
<fx:Declarations>
</fx:Declarations>

<fx:Script>
    <![CDATA[

        private function init():void{
            nav1.activeView.addEventListener(CustomEvent.DATA, onData);
            nav2.activeView.addEventListener(CustomEvent.DATA, onData);
        }

        private function onData(ev:CustomEvent):void{
            nav1.activeView.data = ev.data;
            nav2.activeView.data = ev.data;
        }           
    ]]>
</fx:Script>

<s:ViewNavigator id="nav1" label="Nav1" firstView="views.Nav1Home" width="100%" height="100%"/>
<s:ViewNavigator id="nav2" label="Nav2" firstView="views.Nav2Home" width="100%" height="100%"/>

CustomEvent.as

package
{
import flash.events.Event;

public class CustomEvent extends Event
{   
    public static var DATA:String = "DATA_EVENT";
    public var data:Object = null;

    public function CustomEvent(data:Object, type:String, bubbles:Boolean=false, cancelable:Boolean=false)
    {
        super(type, bubbles, cancelable);
        this.data = data;
    }
}

}

views.Nav1Home.mxml

<?xml version="1.0" encoding="utf-8"?>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[
        private function init(): void {
            this.addEventListener(FlexEvent.REMOVING, removedHandler);
        }

        private function removedHandler(event:Event):void {
            trace("Removed from stage: " + data);
            this.dispatchEvent(new CustomEvent("Data from Nav1 Event", CustomEvent.DATA));
        }
    ]]>
</fx:Script>

views.Nav2Home.mxml

<?xml version="1.0" encoding="utf-8"?>

<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>

<fx:Script>
    <![CDATA[           
        private function init(): void {
            this.addEventListener(FlexEvent.REMOVING, removedHandler);
        }

        private function removedHandler(event:Event):void {
            trace("Removed from stage: " + data);
            this.dispatchEvent(new CustomEvent("Data from Nav2 Event", CustomEvent.DATA));
        }
    ]]>
</fx:Script>

于 2011-02-13T00:41:40.383 に答える
0

viewNavigatorを使用してビュー間を移行する場合の最も簡単な方法は、データオブジェクトをビューに渡すことです。

View1で:

private function view1_clickHandler(event:Event):void {
  var trans:FlipViewTransition = new FlipViewTransition();
  var obj:Object = new Object();
  obj.showPrevBtn = false;                      
  FlexGlobals.topLevelApplication.tabNavigator.pushView(View2, obj, null, trans);
}

View2で:

protected function view2_addedToStageHandler(event:Event):void
{
  if(prevBtn != null && this.data != null && this.data.showPrevBtn === true) {
    prevBtn.visible = true;
  } else if(prevBtn != null && this.data != null && this.data.showPrevBtn === false)  {
    prevBtn.visible = false;
  }
}
于 2013-04-06T17:46:46.970 に答える