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";
???
答案 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调用中创建一个新的匿名函数。