flex移动。如何备份数据?

时间:2013-02-20 14:21:28

标签: flex

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

我需要将数据传递给第二个。然后我必须编辑“名称”,并且“注释”和按钮保存必须将新数据返回到第一视图。我如何从第一视图中获取“动作”并进行编辑?

1 个答案:

答案 0 :(得分:1)

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

我会研究这些选项:

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