AS3数据绑定到ArrayCollection中索引的特定属性

时间:2014-01-19 03:34:46

标签: actionscript-3 flex data-binding arraycollection

我有一种情况,我想使用ArrayCollection中的数据绑定来填充Flex视图中的文本字段。

从SQL Result对象填充ArrayCollection。我使用这样的getter和setter将ArrayColelction存储在我的模型类中:

private var _monthlyData:ArrayCollection;

public function set monthlyData(value:ArrayCollection):void{
_monthlyData = value;
}

[Bindable]
public function get monthlyData():ArrayCollection{
return _monthlyData;
}

我使用monthlyData作为列表等的数据提供者,工作正常。我还需要在此集合中的某些索引处使用属性作为文本字段字符串。 设置文本字段文本属性后,我不一定要填充monthlyData arrayCollection。

文本字段在另一个外部类中设置,并且具有对此模型的单例引用,因此我现在设置了这样的字段:

textField.text = _model.monthlyData.getItemAt(3).Month;

我想设置绑定到数组集合,而不是仅使用此赋值方法,以便在刷新数组中的项目或填充或更新整个arrayCollection时,它将更新textField文本。 我无法让绑定工作。

我目前正在使用bindageTools但是也使用内置的as3 BindingUtils效果不大。

我可以执行以下操作,正确设置初始文本属性,但是当ArrayCollection更改时它不会更新:

Bind.fromProperty(_model.monthlyData.getItemAt(3),"Month").toProperty(textField, "text");

所以,如果有人可以请指出我正确的方向,哪种方式最适合纯粹的AS3没有MXML,我真的很感激。

干杯 马可

1 个答案:

答案 0 :(得分:2)

从您提供的代码中,我可以看到monthlyData是可绑定的,这很好。我假设_model也是可绑定的。
但是getItemAt()方法不可绑定(当项目更改集合中的位置时,它不会调度propertychange事件),因此文本字段的text属性不会更新。

你可以做的是这样的事情:

[Bindable]
public var selectedDate3:MyDate;

<s:TextInput id="myTextInput" text="{selectedDate3.month}" />

或相当于AS的东西(为什么你想让自己的事情变得更加困难)但

BindingUtils.bindProperty(myTextInput, "text", selectedDate3, "month");

然后以编程方式更新selectedDate3

_model.monthlyData.addEventListener(CollectionEvent.COLLECTION_CHANGE, updateSelected);

private function updateSelected(event:CollectionEvent):void {
    selectedDate3 = _model.monthlyData.getItemAt(3);
}

请注意,month的{​​{1}}属性也必须是可绑定的。


您提到这些字段位于VGroup中。我猜你想要显示前三名或其他东西。这仍然是一个清单。使用List或DataGroup执行此操作会更简单,更简洁,只需过滤ArrayCollection即可显示前3个项目(或要显示的项目的任何规则),或将DataGroup配置为仅显示三个项目(它无论如何都没有滚动条。)