ActionScript中的绑定是如何工作的?

13
据我了解,ActionScript中绑定变量是通过自动触发变量更改事件来实现的。关于这个问题,我有几个疑问:
  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函数。这似乎是不允许的。

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”)],然后从类中的某个地方分派该事件。


谢谢Chris,这是一个非常有帮助的解释。 - aaaidan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接