4

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";
???
4

3 回答 3

2

方法是使用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 转换生成的代码更长,因为它必须更通用。在此示例中,它可能会生成两个函数,一个用于每个绑定表达式。

于 2008-09-19T15:32:39.230 回答
2

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

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

于 2008-09-19T18:34:00.480 回答
0

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

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

于 2008-09-19T15:27:47.730 回答