绑定ArrayCollections数组

时间:2010-07-17 10:50:39

标签: flex data-binding repeater

我一直在努力组织数据并将其绑定到我的应用程序中的Repeater。 我最初做的是保存一组数组,这样我就可以很容易地访问任何值。但后来我意识到我需要将它们绑定到Repeater,所以我不得不切换到ArrayCollection数组。但是Binding问题没有解决,因为ArrayCollection中仍然有数组(不可绑定)。那么,我该怎么办?

下面是我想要做的一个例子:

<mx:Script>
    <![CDATA[
        import mx.collections.ArrayCollection;
        [Bindable] public var arr:ArrayCollection = new ArrayCollection(
            [[              {v:"1", s:"f"}, {v:"1", s:"p"}, {v:"1", s:"c"}, {v:"1", s:"q"}
            ], [
                {v:"1", s:"f"}, {v:"1", s:"p"}, {v:"1", s:"c"}, {v:"1", s:"q"}
            ]]
        );
        protected function button1_clickHandler(event:MouseEvent):void
        {
            trace(arr.getItemAt(0).length);
             arr.getItemAt(0).splice(0, 1);
             trace(arr.getItemAt(0).length);
        }

    ]]>
</mx:Script>
<mx:HBox>


<mx:Repeater id="rep" dataProvider="{arr.getItemAt(0)}">
    <mx:Label text="{rep.currentItem.v}" />
</mx:Repeater>
    <mx:Button label="del" click="button1_clickHandler(event)" />
</mx:HBox>

跟踪显示数组大小更改,但转发器不更新。 任何的想法??什么是最佳做法?

1 个答案:

答案 0 :(得分:1)

绑定在源更改时更新目标。在复杂对象(例如数组)中,该源是指向其他内存位置的指针。在这种情况下,你不会改变来源;只有源指向的项目。因此绑定不会有任何影响。

那就是说,转发器是不寻常的野兽,我建议你不要使用它。使用基于列表的类,例如List。由于渲染器的回收利用,这比使用中继器的性能要求更低。

基于列表的类;你的dataProvider变成了ListCollectionView;然后它会监听dataProvider的CollectionChange事件,以便在dataProvider中的元素发生更改时修改显示的项目。使用转发器时没有这样的代码。