在ActionScript中复制复杂的MXML绑定

时间:2008-09-19 14:18:42

标签: flex data-binding mxml

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

3 个答案:

答案 0 :(得分: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转换生成的代码更长,因为它必须更通用。在这个例子中,它可能会生成两个函数,每个函数对应一个绑定表达式。

答案 1 :(得分:2)

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

完成后,Flex将在源文件夹中创建一个“生成”目录,在内部,您将找到所有临时文件,这些文件是在编译期间使用的。

答案 2 :(得分:0)

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

你可以使用ChangeWatcher做类似的事情。您甚至可以在changewatcher调用中创建一个新的匿名函数。