12

据我了解,绑定到 ActionScript 中的 var 是通过更改 var 时自动触发的事件来执行的。我对此有几个问题:

  1. 如果类没有显式扩展 EventDispatcher 会发生什么?编译器中是否存在某种魔法,本质上使该类成为 EventDispatcher?
  2. 绑定到静态变量如何工作?类中是否添加了某种隐式静态 addEventListener() 函数?
  3. 我注意到您可以将 [Bindable] 放在静态变量上,但不能放在静态函数上,这是为什么呢?

编辑:

感谢 Christophe Herreman 的启发性回答。但是,我从上面的问题中得到了一些后续。我想知道是否有人可以为我填补空白(我试图将这些问题编号为 4、5、6,但由于某种原因它们出现了 1、2、3!)

  1. 我在编译器中添加了 -keep 选项并查看了生成的绑定代码。谁能解释如何应用此代码?编译器似乎为每个类生成了一个名为 BindableProperty 的类,其中包含 getter 和 setter。这如何融入我写的课程中?该功能看起来有点像 C# 中的部分类 - 这是专门的幕后编译器功能,还是我可以自己使用的功能?

  2. BindableProperty类依然没有显式实现EventDispatcher,生成的类是如何实现事件调度的呢?

  3. 在问题 3 中,我询问了绑定到静态函数的问题,但我实际上是指静态 getter 和 setter 函数。这似乎是不允许的。

4

1 回答 1

14

绑定确实通过事件分派起作用。通过将 -keep 标志添加到编译器设置,您可以从生成的 Actionscript 代码中学到很多东西。

我会尽力回答你的问题。

  1. 编译器将获取 [Bindable] 元数据标记,并为您标记为可绑定的每个属性创建一个 getter 和 setter。getter 只会返回属性的值。setter 将检查新值是否与原始值不同,如果不同,将调度 PropertyChange 事件。

  2. 基本上与实例属性相同,只是现在创建了静态 getter 和 setter。此外,还创建了一个 mx.binding.StaticPropertyWatcher 来观察静态属性的变化。

  3. 绑定到静态方法时,您会收到以下警告:“[Bindable] 在应用于不是 getter 或 setter 的函数时需要事件名称参数。” 描述几乎说明了一切。由于您没有专门为此方法触发的“propertyChange”事件,因此您必须自己调度一个自定义事件。那就是 [Bindable(event="customEvent")] ,然后从你的类中的某个地方分派那个事件。

于 2008-11-26T19:11:29.433 回答