Apache flex Actionscript组件能否侦听自己的propertyChange事件?
我在Actionscript中有一个CircleButton类。 我想知道外部有人何时更改了“on”属性。 我试着听“onChange”,但它从来没有击中那个事件处理程序 我知道我可以将“on”属性作为get/setter编写,但我喜欢使用[Bindable]的简单性 一个对象不能监听它自己的事件吗Apache flex Actionscript组件能否侦听自己的propertyChange事件?,apache-flex,actionscript,event-handling,Apache Flex,Actionscript,Event Handling,我在Actionscript中有一个CircleButton类。 我想知道外部有人何时更改了“on”属性。 我试着听“onChange”,但它从来没有击中那个事件处理程序 我知道我可以将“on”属性作为get/setter编写,但我喜欢使用[Bindable]的简单性 一个对象不能监听它自己的事件吗 public class CircleButton extends UIComponent { [Bindable] public var on:Boolean; pub
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 {
您可以使用BindingUtils.bindSetter()
一个例子被发现。仅仅因为某个东西可以绑定到变量,并不意味着某个东西绑定到变量。这有点像事件系统——仅仅因为某些东西可以发送事件并不意味着任何东西都在侦听 Flex绑定所基于的类是BindingUtils和ChangeWatcher。当您直接在MXML中绑定(编译器刚刚将其转换为AS3)时,它会在后台使用这些类来实际建立绑定。我以前在ChangeWatcher中搜索过,当它查看潜在可绑定项的列表时,它只会在某个对象实际列为侦听器时发送。整个绑定系统实际上是一个围绕事件系统的智能包装器 AS3而不是MXML中绑定的语义是不同的。仅在MXML中工作的细微差异(如链接到对象的子属性)需要在AS3中工作以复制行为(可能是MXML到AS3之间代码生成的结果) 看看这个,了解一下AS代码中ChangeWatcher的一些信息
就我个人而言,我不在MXML之外使用绑定,因为我觉得它很笨拙。我建议您编写一个setter函数,因为它更容易预测(而且很可能具有更好的性能)。我还建议您通读ChangeWatcher和BindingUtils的源代码。这绝对是你可能会读到的最高级的AS3。我最喜欢的方法之一是发现的Observe类。它本质上是使用setter,但这是一种很好的可重复方法。如果使用[Bindable]标记而不指定事件类型,那么当属性更改其值时,将调度一个类型为PropertyChangeEvent.property_CHANGE的事件,即字符串“propertyChange” 因此,为了能够注册收听该活动,您需要说:
this.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, onOnChange);
从未调用侦听器函数的原因是事件类型不正确
请注意,当类中标记为可绑定的任何变量发生更改时,将调用侦听器方法,而不仅仅是“on”。此事件附带一个名为“property”的属性,该属性指示更改了哪个变量
为了避免对每个可绑定变量调用,您需要在[Bindable]标记中指定一个事件:
[Bindable(event="myOnChangeEvent")]
当您认为属性正在改变(即:在SETER中)时,手动发送事件(虽然这不是您想做的事情)。您不需要在方法调用前面的<代码>这个< /代码>引用。您不需要,但它是为了清楚地添加添加监听器的人而添加的。