我一直在努力组织数据并将其绑定到我的应用程序中的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>
跟踪显示数组大小更改,但转发器不更新。 任何的想法??什么是最佳做法?
答案 0 :(得分:1)
绑定在源更改时更新目标。在复杂对象(例如数组)中,该源是指向其他内存位置的指针。在这种情况下,你不会改变来源;只有源指向的项目。因此绑定不会有任何影响。
那就是说,转发器是不寻常的野兽,我建议你不要使用它。使用基于列表的类,例如List。由于渲染器的回收利用,这比使用中继器的性能要求更低。
基于列表的类;你的dataProvider变成了ListCollectionView;然后它会监听dataProvider的CollectionChange事件,以便在dataProvider中的元素发生更改时修改显示的项目。使用转发器时没有这样的代码。