更新Spark组件时是否需要覆盖提交属性?

时间:2012-08-18 04:28:38

标签: flex adobe flex-spark

我理解在创建自定义组件时,通常最好通过使用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已经使用了一个失效过程,这使得上面的代码毫无意义,是吗?或者我错过了什么?

1 个答案:

答案 0 :(得分:1)

  

但是在属性只影响Spark组件的情况下,   这不是多余的,因为Spark组件已经推迟了它们   财产变化?

我不相信这是一个真实的陈述。 Spark Components不会以与MX Components不同的方式推迟其属性更改。

  

但是Spark Button类中的“label”的setter已经在使用了   失效过程使上面的代码毫无意义,是吗?要么   我错过了什么吗?

是的,您错过了每个火花组件都有自己的失效循环的事实。这与一个MX组件包含另一个MX组件的MX组件没有什么不同。

我不清楚,但你似乎在看两个相同的事情(MX Invalidation和Spark失效),并说它们是不同的。