我理解在创建自定义组件时,通常最好通过使用setter / getters,设置“脏”标志,调用invalidateProperties(),然后让commitProperties()处理实际的内容来推迟对它的任何属性更改。变化。
但是在属性只影响Spark组件的情况下,这不是多余的,因为Spark组件已经推迟了它们的属性更改吗?
例如,假设我有一个包含Spark按钮的自定义UIComponent,我想为它公开一个用于更改按钮标签的buttonLabel属性:
private var _buttonLabel:String;
private var myBtn:Button;
private var _buttonLabelChanged:Boolean = false;
function set buttonLabel(lbl:String){
_buttonLabel = lbl;
_buttonLabelChanged = true;
invalidateProperties();
}
然后设置buttonLabel属性最终会触发:
override protected function commitProperties(){
if(_buttonLabelChanged){
myBtn.label = _buttonLabel;
_buttonLabelChanged = false;
}
}
但Spark Button类中“label”的setter已经使用了一个失效过程,这使得上面的代码毫无意义,是吗?或者我错过了什么?
答案 0 :(得分:1)
但是在属性只影响Spark组件的情况下, 这不是多余的,因为Spark组件已经推迟了它们 财产变化?
我不相信这是一个真实的陈述。 Spark Components不会以与MX Components不同的方式推迟其属性更改。
但是Spark Button类中的“label”的setter已经在使用了 失效过程使上面的代码毫无意义,是吗?要么 我错过了什么吗?
是的,您错过了每个火花组件都有自己的失效循环的事实。这与一个MX组件包含另一个MX组件的MX组件没有什么不同。
我不清楚,但你似乎在看两个相同的事情(MX Invalidation和Spark失效),并说它们是不同的。