我有一种情况,我想使用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,我真的很感激。
干杯 马可
答案 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配置为仅显示三个项目(它无论如何都没有滚动条。)