commitProperties属性设置

本文深入探讨了Flex框架中的commitProperties()函数的应用,并通过实例讲解如何正确设置组件属性及响应dataProvider的变化,强调了invalidateProperties()的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       commitProperties

        部分Flex框架周期包括一个对commitProperties()函数的调用。在组件的所有属性 都设定完毕之后就会调用这个函数,这一点很重要,因为你不知道在一个属性的set函数中是否调用了另外一个属性的set函数。例如,如果第三个属性的设定 需要用到其它两个的值,那么设定第三个属性的唯一合理的地方就是在commitProperties()中。

        我们将使用commitProperties()将LinkButton的label属性设定为dataProvider中的一个值。这个例子中它将会被设定为第一个条目。将下面的代码添加到super.commitProperties()下面:

    • linkButton.label = dataProvider[0].label;

        这里可能会发生很多错误:dataProvider属性可能从来没有被设定或者它的第一个条目可能并没有label属性。不过现在我们假设所有的东西都设定好了。

再次运行这个程序你将会看到LinkButton的label变成了”Apples”。

        如果在主程序文件中添加一些代码对CycleSelectButtonV1的 dataProvider做一些更改,你觉得会发生什么事情?如果你更改了一个ComboBox 或者 DataGrid的dataProvider将会发生什么事情?ComboBox 或者 DataGrid将会显示新的值对不对?你肯定希望CycleSelectButton有同样的效果。

        如果你这样写:cycleButton.dataProvider = newValue,这就是对dataProvider调用了组件的set函数:

    • public function set dataProvider( value:ArrayCollection ) : void
    • {
    • _dataProvider = value;
      • }

        重点提示:其中的_dataProvider发生了改变,但是LinkButton的label并没 有改变。你可能会尝试将linkButton.label=value[0].label添加到这个set函数中,但是我希望你看到这样做有很多问题。首先,它“看上去”就不对。而且真正的问题是,当组件正在创建属性还未设定完毕的时候,LinkButton的label属性可能并不能被赋值。当然,在那之后它将可以被赋值,但是在属性设定阶段很多组件都不可能很容易地被改变。

        可以被赋值的地方就是commitProperties()函数。调用commitProperties()函数最合理的地方就是set函数。尽管这“看上去”也不对,而且,它所做的事情不但和上面所做的是一样的,还具有相同的问题。

        接下来我们就想要通知Flex框架commitProperties() 函数需要被调用,而这只需要 在set函数中调用invalidateProperties()函数就可以了。在Flex框架中invalidateProperties()函数的作 用是设定一个标记(flag),这个函数的好处是你可以设定100个属性并调用invalidateProperties()函数100次,而 commitProperties()只会被调用一次,非常有效率。对set函数作以下更改:

    • public function set dataProvider( value:ArrayCollection ) : void
    • {
    • _dataProvider = value;
    • invalidateProperties();
      • }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值