11.9.对添加到State中的Object进行数据绑定
11.9.1. 问题
我想绑定一个对象到属性上,该对象是进入某个state 时才会被创建。
11.9.2. 解决办法
使用mx.binding.utils.BindingUtils 类的bindProperty 方法动态创建绑定。
11.9.3. 讨论
你可以在编译器在MXML 文件内使用{}或者在运行期使用bindProperty 方法创建绑定。
bindProperty 方法格式如下:
方法参数如下:
site
定义绑定到chain 的属性的Object。如果你想使用绑定来改变TextField 的值,例如,这个site就是TextField.
prop
在要绑定的site Object 中定义的公用属性的名称。当chain 值更改时,该属性将接收chain
的当前值。如果你使用绑定来改变TextField 的值,那prop 就是TextField 的text。
host
用于承载要监视的属性或属性链的对象。如果你要绑定到TextInput 的文本值,那host 就是TextInput。
chain
用于指定要监视的属性或属性链的值。合法值可以是包含宿主对象公用可绑定属性名称的字
符串。如果你要绑定到TextInput 的文本值,那chain 就是这个文本值。
commitOnly
如果仅在提交change 事件时需要调用处理函数,则设置为true。
关于数据绑定的细节内容我们将在第十四章, "数据绑定."详细讲解,这一节重点讲解使用bindProperty 创建绑定,将新创建的RichtTextEditor 绑定到TextArea 上:
这里通过bindProperty方法将TextArea的htmlText属性被绑定到RichTextEditor 的htmlText值。
如果你试图把TextArea的htmlText属性绑定到一个还没创建的控件上将会抛出异常:
我想绑定一个对象到属性上,该对象是进入某个state 时才会被创建。
11.9.2. 解决办法
使用mx.binding.utils.BindingUtils 类的bindProperty 方法动态创建绑定。
11.9.3. 讨论
你可以在编译器在MXML 文件内使用{}或者在运行期使用bindProperty 方法创建绑定。
bindProperty 方法格式如下:
+展开
-ActionScript
public static function bindProperty(site:Object, prop:String, host:Object,
chain:Object, commitOnly:Boolean = false):ChangeWatcher
chain:Object, commitOnly:Boolean = false):ChangeWatcher
方法参数如下:
site
定义绑定到chain 的属性的Object。如果你想使用绑定来改变TextField 的值,例如,这个site就是TextField.
prop
在要绑定的site Object 中定义的公用属性的名称。当chain 值更改时,该属性将接收chain
的当前值。如果你使用绑定来改变TextField 的值,那prop 就是TextField 的text。
host
用于承载要监视的属性或属性链的对象。如果你要绑定到TextInput 的文本值,那host 就是TextInput。
chain
用于指定要监视的属性或属性链的值。合法值可以是包含宿主对象公用可绑定属性名称的字
符串。如果你要绑定到TextInput 的文本值,那chain 就是这个文本值。
commitOnly
如果仅在提交change 事件时需要调用处理函数,则设置为true。
关于数据绑定的细节内容我们将在第十四章, "数据绑定."详细讲解,这一节重点讲解使用bindProperty 创建绑定,将新创建的RichtTextEditor 绑定到TextArea 上:
+展开
-XML
<mx:Panel xmlns:mx="http://www.adobe.com/2006/mxml" width="450"
height="650" title="Initial Title" layout="vertical">
<mx:Script>
<![CDATA[
import mx.binding.utils.*;
]]>
</mx:Script>
<mx:states>
<mx:State name="primaryState">
<mx:AddChild>
<mx:VBox id="vbox">
<mx:Text fontSize="18" text="NEW TEXT 1"/>
<mx:Text fontSize="18" text="NEW TEXT 2"/>
</mx:VBox>
</mx:AddChild>
<mx:SetProperty target="{this}" name="title"
value="'Super New Title'"/>
</mx:State>
<mx:State name="secondaryState1">
<mx:AddChild>
height="650" title="Initial Title" layout="vertical">
<mx:Script>
<![CDATA[
import mx.binding.utils.*;
]]>
</mx:Script>
<mx:states>
<mx:State name="primaryState">
<mx:AddChild>
<mx:VBox id="vbox">
<mx:Text fontSize="18" text="NEW TEXT 1"/>
<mx:Text fontSize="18" text="NEW TEXT 2"/>
</mx:VBox>
</mx:AddChild>
<mx:SetProperty target="{this}" name="title"
value="'Super New Title'"/>
</mx:State>
<mx:State name="secondaryState1">
<mx:AddChild>
这里通过bindProperty方法将TextArea的htmlText属性被绑定到RichTextEditor 的htmlText值。
如果你试图把TextArea的htmlText属性绑定到一个还没创建的控件上将会抛出异常:
+展开
-XML
<mx:RichTextEditor id="richText" height="200" width="250" creationComplete="BindingUtils.bindProperty(area, 'htmlText',
richText, 'htmlText')"/>
</mx:AddChild>
<mx:SetProperty target="{this}" name="title"
value="'Lame Old Title'"/>
</mx:State>
<mx:State name="secondaryState2" basedOn="primaryState">
<mx:SetProperty target="{this}" name="title"
value="'Third Title'"/>
</mx:State>
</mx:states>
<mx:ComboBox
dataProvider="{[''primaryState', 'secondaryState1',
'secondaryState2']}"
change="currentState=cb.selectedItem as String" id="cb"/>
<mx:TextArea height="100" width="450" id="area"
htmlText="foo bar baz"/>
</mx:Panel>
richText, 'htmlText')"/>
</mx:AddChild>
<mx:SetProperty target="{this}" name="title"
value="'Lame Old Title'"/>
</mx:State>
<mx:State name="secondaryState2" basedOn="primaryState">
<mx:SetProperty target="{this}" name="title"
value="'Third Title'"/>
</mx:State>
</mx:states>
<mx:ComboBox
dataProvider="{[''primaryState', 'secondaryState1',
'secondaryState2']}"
change="currentState=cb.selectedItem as String" id="cb"/>
<mx:TextArea height="100" width="450" id="area"
htmlText="foo bar baz"/>
</mx:Panel>
加支付宝好友偷能量挖...