我在 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/