我有一个组件,我使用以下代码公开属性'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方法。
有人可以帮我理解为什么会这样吗?
答案 0 :(得分:3)
您必须显示更改数组集合的代码。但是,这将解雇二传手:
questions = somethingArrayCollection();
这不会:
questions.addItem(newQestion)
问题变量基本上是一个指针。更改变量指向的内容不需要set事件。
我建议您查看CollectionChangeEvent,当项目添加到其中时,ArrayCollection会触发它。聆听事件并在事件处理程序中执行“更改”操作。 (或绑定到生命周期并使某些标志无效并在commitProperties()中执行更改)