1

我有 2 个视图。这是第一视图。

    <?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        title="MTA">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            import adobe.utils.CustomActions;

            import data.MTA_Item;

            [Bindable]
            public static var actions:ArrayCollection;
            public var firstItem:MTA_Item;
            public var secondItem:MTA_Item;
            public var thirdItem:MTA_Item;
            public function initItems():ArrayCollection
            {
                actions = new ArrayCollection();
                firstItem = new MTA_Item(1,"Test","Test note");
                secondItem = new MTA_Item(2,"DevCom","My First Notes");
                thirdItem = new MTA_Item(3,"Auto" , "BMW");
                actions.addItem(firstItem);
                actions.addItem(secondItem);
                actions.addItem(thirdItem);
                return actions;
            }
            override public function set data(value:Object):void
            {
                if(actions == null)
                initItems();
            }
        ]]>


    </fx:Script>

    <s:VGroup>

    <s:Label text="was" >

    </s:Label>
    </s:VGroup>
    <s:List id="items" left="0" right="0" top="0" bottom="0" dataProvider="{actions}" change="navigator.pushView(FormDetails, items.selectedItem)">
        <s:itemRenderer>
            <fx:Component>
                <s:IconItemRenderer label="ID:{data.ID}Name:{data.Name}" />
            </fx:Component>
        </s:itemRenderer>
    </s:List>

</s:View>

第二视图。

    <fx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;

            import views.FlexMobileTestAppHomeView;
            public function list_changeHandler(event:Event):void
            {
                var name:String = _namechange.text;
                var notes:String  = _note.text;
                navigator.pushView(FlexMobileTestAppHomeView,data);

            }
            override public function set data(value:Object):void
            {

            }
        ]]>
    </fx:Script>
    <s:navigationContent>
        <s:Button label="Back"
                  click="navigator.popToFirstView()"/>
    </s:navigationContent>
    <s:actionContent >
        <s:Button label="save" click="list_changeHandler(event)" />

    </s:actionContent>

    <s:HGroup verticalAlign="middle" gap="12">

        <s:VGroup>
            <s:HGroup>
                <s:Label text="Name:" />
                <s:TextInput  id="_namechange" text="{data.Name}">

                </s:TextInput>  
            </s:HGroup>
            <s:HGroup>
                <s:Label text="Notes:"/>
                <s:TextArea id="_note"  text="{data.Notes}" />


            </s:HGroup>

        </s:VGroup>

    </s:HGroup>

</s:View>

我需要将数据传递给 2-nd。然后我必须编辑 "name" ,并且 "notes" 和按钮保存必须将新数据返回到 1-st 视图。我如何从第一视图和编辑中获取“操作”?

4

1 回答 1

1

有很多方法可以在两个组件之间共享数据。我写了这篇关于在两个 Flex 组件之间共享数据的 Flex 工具的博客文章;但是我认为你最适合更具体的东西。

我会研究这些选项:

  1. 覆盖第二个视图中的 createReturnObject 方法。 更多信息在这里。请务必阅读评论以获取有关在最新 Flex 版本中访问数据的信息。
  2. 使用支持依赖注入的框架。RobotLegs 和 Swiz 是我过去使用过的两个选项。基本上,创建一个包含对 selectedItem 的引用的模型对象并将其注入到两个视图中。许多人会声称这是最好的方法。
  3. 将所选对象的引用存储在静态变量中;这样您就可以在两个视图中引用它。这比第一条学习曲线要​​少得多。
  4. 由于您已经在pushView方法中传递了对组件的引用;您确定返回时参考不会自动更新吗?实际上,这两个视图本质上都是使用相同的内存引用来获取数据。不过,您可能需要刷新列表才能了解更改。或者我可能错了。
于 2013-02-20T15:33:18.213 回答