我需要动态绑定在运行时创建的组件的属性.在这种特殊情况下,请假设我需要使用bindProperty.
我不太明白为什么下面的简单测试失败了(参见代码).单击按钮时,标签文本不会更改.
我意识到使用传统的非动态绑定有更简单的方法可以解决这个特定的例子,但我需要在使用bindProperty方面理解它.
有人可以帮我理解我错过的东西吗?
<?xml version="1.0" encoding="utf-8"?> <mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="Tools.*" minWidth="684" minHeight="484" xmlns:ns2="*" creationComplete="Init();"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; import mx.binding.utils.*; public var Available:ArrayCollection=new ArrayCollection(); public function get Value():String { return (Available.getItemAt(0).toString()); } public function Init():void { Available.addItemAt('Before',0); BindingUtils.bindProperty(Lab,'text',this,'Value'); } public function Test():void { Available.setItemAt('After',0); } ]]> </mx:Script> <mx:Label x="142" y="51" id="Lab"/> <mx:Button x="142" y="157" label="Button" click="Test();"/> </mx:WindowedApplication>@H_502_9@提前致谢.
解决方法
正如Glenn所提到的,你需要在Value上添加[Bindable]标签.
此外,您尚未为该属性定义setter.仅在调用相应的setter时才调用数据绑定.流程类似于:您调用setter – Flex通过调用getter来更新数据.
[Bindable] public function get value():String { return (Available.getItemAt(0).toString()); } public function set value(v:String):void { Available.setItemAt(v,0); } public function init():void { Available.addItemAt('Before',0); BindingUtils.bindProperty(Lab,'Value'); } public function iest():void { value = "After"; }@H_502_9@