【问题标题】:Duplicate complex MXML binding in ActionScript在 ActionScript 中复制复杂的 MXML 绑定
【发布时间】:2008-09-19 14:18:42
【问题描述】:

MXML 让您可以进行一些非常强大的数据绑定,例如:

<mx:Button id="myBtn" label="Buy an {itemName}" visible="{itemName!=null}"/>

我发现 BindingUtils 类可以将值绑定到简单的属性,但是上面的绑定都没有这样做。是否可以在 AS3 代码中执行相同的操作,或者 Flex 是否可以从我的 MXML 静默生成多行代码? 任何人都可以在纯 AS3 中复制上述内容,从:

var myBtn:Button = new Button();
myBtn.id="myBtn";
???

【问题讨论】:

    标签: apache-flex data-binding mxml


    【解决方案1】:

    方法是使用bindSetter。当您的示例中的 MXML 在编译之前转换为 ActionScript 时,这也是在幕后完成的。

    // assuming the itemName property is defined on this:
    BindingUtils.bindSetter(itemNameChanged, this, ["itemName"]);
    
    // ...
    
    private function itemNameChanged( newValue : String ) : void {
      myBtn.label   = newValue;
      myBtn.visible = newValue != null;
    }
    

    ...除了 MXML 到 ActionScript 转换生成的代码更长,因为它必须更通用。在此示例中,它可能会生成两个函数,一个用于每个绑定表达式。

    【讨论】:

      【解决方案2】:

      您还可以通过在编译器设置中添加 -keep 参数来查看 flex 在编译 mxml 文件时自动生成的代码。您可以通过选择项目属性并查看“Flex Compiler”选项来找到您的设置,然后在“Additional compiler arguments:”下将“-keep”添加到已经存在的内容中。

      完成后,Flex 将在您的源文件夹中创建一个“生成”目录,在其中您会发现所有临时文件都在编译期间使用。

      【讨论】:

        【解决方案3】:

        我相信 flex 会生成一个小的匿名函数来处理这个问题。

        您可以使用 ChangeWatcher 进行类似操作。您甚至可以在 changewatcher 调用中创建一个新的匿名函数。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-09-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-11
          • 2012-06-30
          • 1970-01-01
          相关资源
          最近更新 更多