ActionScript中的绑定如何工作?

时间:2008-11-26 12:13:33

标签: flex actionscript-3 data-binding air

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

  1. 如果类没有显式扩展EventDispatcher会怎样?在编译器中是否存在某种神奇的东西,它基本上使该类成为EventDispatcher?
  2. 如何绑定到静态变量?是否在类中添加了某种隐式静态addEventListener()函数?
  3. 我注意到你可以把[Bindable]放在静态变量而不是静态函数上,为什么会这样?
  4. 编辑:

    感谢Christophe Herreman的出色回答。但是,我从上面的问题中得到了一些后续内容。我想知道是否有人可以为我填补空白(我试着给这些问题编号4,5,6,但出于某种原因他们出现了1,2,3;)

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

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

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

1 个答案:

答案 0 :(得分:14)

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

我会尽力回答你的问题。

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

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

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