为什么更改ArrayCollection的长度不会使用它作为数据源调用组件上的Setter?

时间:2010-12-15 18:36:04

标签: flex data-binding arraycollection

我有一个组件,我使用以下代码公开属性'questions':

private var _questions:ArrayCollection;
private var questionsChanged:Boolean;

[Bindable("questionsChanged")]
public function get questions():ArrayCollection {
    return _questions;
}

public function set questions(value:ArrayCollection):void {
    if (_questions != value) {
        _questions = value;
        questionsChanged = true;
        invalidateProperties();
        dispatchEvent(new Event("questionsChanged"));
    }
}

在这个组件中,我使用commitProperties()来实现我的逻辑。

我使用Cairngorm并且'问题'在模型中,因此它被定义为数据绑定的来源。

当'questions'ArrayCollection的大小在应用程序的其他地方发生更改时,它不会在作为数据绑定目标的组件中调用setter方法。

有人可以帮我理解为什么会这样吗?

1 个答案:

答案 0 :(得分:3)

您必须显示更改数组集合的代码。但是,这将解雇二传手:

questions = somethingArrayCollection();

这不会:

questions.addItem(newQestion)

问题变量基本上是一个指针。更改变量指向的内容不需要set事件。

我建议您查看CollectionChangeEvent,当项目添加到其中时,ArrayCollection会触发它。聆听事件并在事件处理程序中执行“更改”操作。 (或绑定到生命周期并使某些标志无效并在commitProperties()中执行更改)