【问题标题】:AS3 Databinding to Specific property at an index in ArrayCollectionAS3 数据绑定到 ArrayCollection 中索引处的特定属性
【发布时间】:2014-01-19 03:34:46
【问题描述】:

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

ArrayCollection 由 SQL Result 对象填充。我使用 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 中进行绑定的最佳方式,我将不胜感激。

干杯 马可

【问题讨论】:

  • 这是在 ItemRenderer 中发生的,还是您从集合中选择一个要绑定到文本字段的项目?还有关于The text fields are set in another outside class with has a singleton reference to this model:你不应该直接设置视图元素的值;设置模型并让数据绑定相应地更新视图。
  • 嗨 RIAstar。这不会发生在项目渲染器内部。我在 spark 视图/scroller/Vgroup 中有几个 Spark 标签...我想将它们的文本属性绑定到 ArrayCollection 中的值。

标签: actionscript-3 apache-flex data-binding arraycollection


【解决方案1】:

从您提供的代码中,我可以看到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);
}

注意MyDatemonth 属性也必须是可绑定的。


您提到这些字段位于 VGroup 中。我猜你想显示前三名或其他东西。这仍然是一个列表。使用 List 或 DataGroup 执行此操作并简单地过滤 ArrayCollection 以仅显示前 3 个项目(或要显示的项目的任何规则),或者将 DataGroup 配置为仅显示三个项目(它反正没有滚动条)。

【讨论】:

  • 嘿RIAstar。谢谢你的帮助。我必须坚持使用 AS3,所以我将使用您展示的侦听器场景。从长远来看,我可能需要重新考虑我的结构,但这现在应该可行。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2014-08-18
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2013-01-16
  • 1970-01-01
  • 2012-05-19
  • 1970-01-01
相关资源
最近更新 更多