ActionScript 中的绑定如何工作?
Posted
技术标签:
【中文标题】ActionScript 中的绑定如何工作?【英文标题】:How does binding in ActionScript work? 【发布时间】:2010-09-24 03:29:13 【问题描述】:据我了解,在 ActionScript 中绑定到 var 是通过更改 var 时自动触发的事件来执行的。我对此有几个问题:
-
如果类没有显式扩展 EventDispatcher 会发生什么?编译器中是否有某种魔法使该类成为 EventDispatcher?
如何绑定到静态变量?类中是否添加了某种隐式静态 addEventListener() 函数?
我注意到您可以将 [Bindable] 放在静态变量上,但不能放在静态函数上,这是为什么呢?
编辑:
感谢 Christophe Herreman 富有启发性的回答。但是,我从上面的问题中得到了一些后续。我想知道是否有人可以为我填补空白(我试图将这些问题编号为 4、5、6,但由于某种原因它们出现了 1、2、3!)
我已将 -keep 选项添加到编译器并查看了生成的绑定代码。谁能解释如何应用此代码?编译器似乎为每个类生成了一个名为 BindableProperty 的类,其中包含 getter 和 setter。这如何融入我写的课程中?该功能看起来有点像 C# 中的部分类 - 这是专门的幕后编译器功能,还是我可以自己使用?
BindableProperty类依然没有显式实现EventDispatcher,生成的类如何实现事件调度?
在问题 3 中,我询问了绑定到静态函数的问题,但我实际上是指静态 getter 和 setter 函数。这似乎是不允许的。
【问题讨论】:
【参考方案1】:绑定确实通过事件分派起作用。通过将 -keep 标志添加到编译器设置,您可以从生成的 Actionscript 代码中学到很多东西。
我会尽力回答你的问题。
编译器将获取 [Bindable] 元数据标记,并为您标记为可绑定的每个属性创建一个 getter 和 setter。 getter 只会返回属性的值。 setter 将检查新值是否与原始值不同,如果不同,将调度 PropertyChange 事件。
基本上与实例属性相同,只是现在创建了静态 getter 和 setter。此外,还创建了一个 mx.binding.StaticPropertyWatcher 来观察静态属性的变化。
当绑定到静态方法时,您会收到以下警告:“[Bindable] 在应用于不是 getter 或 setter 的函数时需要事件名称参数。”描述几乎说明了一切。由于您没有专门为此方法触发的“propertyChange”事件,因此您必须自己调度一个自定义事件。那就是 [Bindable(event="customEvent")],然后从你的类中的某个地方分派那个事件。
【讨论】:
谢谢克里斯,这是一个非常有用的解释。以上是关于ActionScript 中的绑定如何工作?的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 如何在eclipse中的工作区之间移动片段
如何将参数传递给 flex/actionscript 中的事件侦听器函数?