在ActionScript中复制复杂的MXML绑定
时间:2020-03-06 14:26:08 来源:igfitidea点击:
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"; ???
解决方案
我相信flex会产生一个小的匿名函数来处理这个问题。
我们可以使用ChangeWatcher进行类似的操作。我们甚至可以在changewatcher调用中创建一个新的匿名函数。
做到这一点的方法是使用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所生成的代码更长之外,因为它必须更通用。在此示例中,它可能会生成两个函数,每个绑定表达式一个。
我们还可以通过在编译器设置中添加-keep参数来查看flex编译mxml文件时生成的自动生成的代码。我们可以通过选择项目属性并查看" Flex Compiler"选项,然后在"其他编译器参数"下找到设置,将" -keep"添加到已存在的内容中。
完成后,Flex将在源文件夹中创建一个"已生成"目录,我们将在其中找到所有临时文件,这些文件都是编译期间使用的文件。