0

私が取り組んでいる Flex Mobile プロジェクトがあります。あるビューから別のビューにパラメーターを渡そうとしています。唯一の問題は、 navigator.pushView を使用してビューをプッシュできないことと、プッシュ先のビューが前のビューだったため、パラメーターをプッシュできないことです。したがって、pushView を使用できないため、これは addHandler() と returnObjectsCreated() を使用して消去されます。パラメータも渡す必要があるのは以前のビューであるため、popView を使用する必要があります。どんな助けでも大歓迎です。

渡す必要のあるパラメーターを持つクラスを以下に示します。一覧を表示するビューです。したがって、list.selectedItem を popview または前のビューに渡す必要があります...

<?xml version="1.0" encoding="utf-8"?>
<amec:BaseBrowseView xmlns:fx="http://ns.adobe.com/mxml/2009" 
              xmlns:s="library://ns.adobe.com/flex/spark" 
              xmlns:amec="com.amec.Components.*"
              title="Select an item">

<fx:Script>
    <![CDATA[
        import com.amec.BaseSql;

        import mx.collections.ArrayCollection;
        import mx.events.FlexEvent;

        import spark.events.IndexChangeEvent;

        [Bindable]private var resultArr:ArrayCollection = new ArrayCollection();

        protected function myList_changeHandler(event:IndexChangeEvent):void 
        {

            navigator.popView();


            //Either send a ref to the last view or override createReturn

        }


        [Bindable(event="myDataChanged")]
        private function get myData():ArrayCollection
        {

                           }



    ]]>
</fx:Script>

<s:List id="list"         
        height="100%" width="100%" 
        dataProvider="{myData}" 
        labelField="DMV_VALUE_1"
        change="myList_changeHandler(event);">
</s:List>


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

以下は、TextInput にデータを入力できるように、パラメーターを渡す必要がある popView の前のビューです。

<?xml version="1.0" encoding="utf-8"?>
<amec:BaseControl xmlns:fx="http://ns.adobe.com/mxml/2009" 
              xmlns:s="library://ns.adobe.com/flex/spark" 
              xmlns:amec="com.amec.Components.*"
              horizontalCenter="true">

<fx:Script>
    <![CDATA[
        import mx.events.FlexEvent;

        [Bindable]
        protected var textValue:String;

        protected function control_creationCompleteHandler(event:FlexEvent):void
        {
            // todo: get control data from view.data


        }

        protected function control_clickHandler(event:MouseEvent):void
        {

            parentView.navigator.pushView(TextListView);

        }




    ]]>
</fx:Script>

<s:Label text="Robert says something meaningful goes here" />

<s:TextInput id="ns" text="{textValue}" editable="false" click="control_clickHandler(event)"/>





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

ビューが既にスタック上にあるため、再度 pushView を使用できません。

4

2 に答える 2

2

正しい方法で実行したい場合は、前のビュー (結果を表示したいビュー) で、'add' の eventListener を追加します。

protected function addHandler(event:FlexEvent) : void {
if (navigator.poppedViewReturnedObject != null) {
                var returnedObject : Array = navigator.poppedViewReturnedObject.object as Array;
                if(!returnedObject) return;
                yourData= new ArrayCollection(returnedObject);
            }

}

オブジェクトを渡すビューで:

override public function createReturnObject():Object {
            var returnedObject : Object = new Object();
            returnedObject = dataYouWantToSendBack;
            return returnedObject;
        }
于 2013-09-06T23:49:19.170 に答える