ActionScript中的绑定如何工作?

Gro*_*kys 12 apache-flex air data-binding actionscript-3

据我所知,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函数.这似乎不被允许.

Chr*_*man 14

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

我会尽力回答你的问题.

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

  2. 与基本属性相同,现在只创建静态getter和setter.此外,还会创建一个mx.binding.StaticPropertyWatcher来监视静态属性的更改.

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