代码之家  ›  专栏  ›  技术社区  ›  Grokys

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

  •  12
  • Grokys  · 技术社区  · 16 年前

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

    感谢Christophe Herreman的启发性回答。然而,我有一些后续问题。我想知道是否有人能帮我填补这些空白(我试着把这些问题编号为4、5、6,但出于某种原因,它们显示为1、2、3!)

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

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

    1 回复  |  直到 16 年前
        1
  •  14
  •   Christophe Herreman    16 年前

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

    我会尽力回答你的问题。

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

    2. 当您将[binder]名称应用到一个static setter时,“[binder]名称不是一个static setter,而是一个static setter。”。由于您没有专门为此方法触发的“propertyChange”事件,因此您必须自己调度一个自定义事件。即[Bindable(event=“customEvent”)],然后从类中的某个位置分派该事件。