我需要动态绑定在运行时创建的组件的属性。在这种特殊情况下,请假设我需要使用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>
提前致谢。
答案 0 :(得分:3)
正如Glenn所说,您需要在[Bindable]
上添加Value
标记。
此外,您尚未为该属性定义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, 'text', this, 'Value');
}
public function iest():void {
value = "After";
}
请注意,我已根据常规约定将函数和属性的名称更改为小写。 InitialCaps仅用于类名。
答案 1 :(得分:1)
我从不使用BindingUtils,但我的第一个猜测是你错过了“Value”上的[Bindable]标签。