0

我有一个组件,我在其中使用以下代码公开属性“问题”:

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 并且“问题”在模型中,因此它被定义为数据绑定的源。

当“问题”ArrayCollection 的大小在应用程序的其他地方发生变化时,它不会调用作为数据绑定目标的组件中的 setter 方法。

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

4

1 回答 1

3

您必须在更改数组集合的位置显示代码。但是,这将触发 setter:

questions = somethingArrayCollection();

这不会:

questions.addItem(newQestion)

questions 变量基本上是一个指针。改变变量指向的东西不需要 set 事件。

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

于 2010-12-15T20:15:16.643 回答