apache-flex - Actionscript 组件可以监听它自己的 propertyChange 事件吗?

标签 apache-flex actionscript event-handling

我在 Actionscript 中有一个 CircleButton 类。 我想知道外部人员何时更改了“on”属性。 我尝试收听“onChange”,但它从未触发该事件处理程序。

我知道我可以将“on”属性写成 get/setter,但我喜欢使用 [Bindable] 的简单性

对象可以不监听自己的事件吗?

public class CircleButton extends UIComponent

{
    [Bindable]
    public var on:Boolean;

    public function CircleButton()
    {
        this.width = 20;
        this.height = 20;

        graphics.beginFill(0xff6600, 1);
        graphics.drawCircle(width/2, height/2, width/2);
        graphics.endFill();

        this.addEventListener(MouseEvent.ROLL_OVER, rollover);  
        this.addEventListener(MouseEvent.ROLL_OUT, rollout);        

        this.addEventListener('onChange', onOnChange);
    }       

    private function onOnChange(event:PropertyChangeEvent):void {

最佳答案

如果您在未指定事件类型的情况下使用 [Bindable] 标记,则当属性更改其值时,将调度类型为 PropertyChangeEvent.PROPERTY_CHANGE 的事件,即字符串“propertyChange”。

因此,为了能够注册收听该事件,您需要说:

this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onOnChange);

您的监听器函数从未被调用的原因是事件类型不正确。

请注意,当您的类中标记为 Bindable 的任何变量发生变化时,将调用监听器方法,而不仅仅是“on”。此事件带有一个名为“property”的属性,该属性指示更改了哪个变量。

为避免在每个 Bindable 变量上被调用,您需要在 [Bindable] 标签中指定一个事件:

[Bindable(event="myOnChangeEvent")]

并在您认为属性正在更改时(即:在 setter 中)手动分派(dispatch)该事件,尽管这似乎不是您想要做的。

关于apache-flex - Actionscript 组件可以监听它自己的 propertyChange 事件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/210666/

相关文章:

actionscript-3 - Flash 中的地理定位

events - Flutter:如何防止按键时的默认行为?

flash - 版本中的堆栈溢出错误,但不是调试错误。 ( ActionScript )

apache-flex - ActionScript 中的语法高亮库

c# - 我应该如何设置用户控件来触发其子项的事件,就好像它们是它自己的一样?

javascript - PreventDefault ,返回 false 不起作用

apache-flex - Flex 4 创建的应用程序需要单个 SWF 文件吗?

apache-flex - Flex4.6 : works in debug but not in Release build

apache-flex - 安全沙箱违规 : Lack of Policy File Permissions

regex - 是否有可能在 ActionScript/Flex 中创建错误的正则表达式,从而导致运行时错误?