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中的工作区之间移动片段

使用 Actionscript 3 连接到数据库 [关闭]

如何将参数传递给 flex/actionscript 中的事件侦听器函数?

ActionScript 3:curry 函数如何工作?

通过 ActionScript 将数据绑定到 DataGrid

使用 actionscript 取消选中组件中的复选框?