【问题标题】:Is overriding commitProperties neccessary when updating Spark components?更新 Spark 组件时是否需要覆盖提交属性?
【发布时间】:2012-08-18 04:28:38
【问题描述】:

我了解在创建自定义组件时,通常最好的做法是通过使用 setter/getter、设置“脏”标志、调用 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 类中“标签”的设置器已经使用了一个失效过程,这使得上面的代码毫无意义,是吗?还是我错过了什么?

【问题讨论】:

    标签: apache-flex adobe flex-spark


    【解决方案1】:

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

    我不相信这是一个真实的陈述。 Spark 组件延迟其属性更改的方式与 MX 组件没有任何不同。

    但是 Spark Button 类中“标签”的设置器已经在使用 使上述代码毫无意义的失效过程,是吗?或者 我错过了什么吗?

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

    我不清楚,但您似乎正在查看两个相同的东西(MX 无效和 Spark 无效)并说它们是不同的。

    【讨论】:

    • 谢谢,Flextras。我的问题的目的并不是将 MX 与 Spark 进行比较。我只提到了 Spark,因为我在那些组件中检查了组件代码。我要解决的是通过使用无效循环来优化 CPU 周期的想法,以及它对简单操作似乎没有用处。在上面的示例中, buttonLabel 设置器试图“保护” myBtn.label 在一个框架中被设置太多次。但是 Button 的标签设置器已经对此进行了自己的检查,那么为什么要再次包装它(至少对于这个特定示例而言)?
    • 你不会再把它包起来了;因为您正在处理两个独立的组件和两个独立的生命周期——即使一个是另一个的孩子。可能会在主组件上更改 15 个属性,这与按钮子按钮上的 3 个更改有关。将这些更改协调到一个位置通常是有意义的。如果您可以保证没有属性会与其他属性一起更改,那么请随意忽略失效过程。为重用而建造时;你不想假设这一点。为您自己的应用构建时可能没问题。
    • 我相信我理解您的意思:commitProperties 在一个周期内一次更改多个属性时有效(我想我会补充一点,如果更改属性触发它也有效广泛的计算)。您能否提交一个正式的答案,以便我将答案归于您?
    • 我确实提交了正式答案;这就是我们要评论的内容。
    猜你喜欢
    • 2017-04-16
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多