11.9.对添加到State中的Object进行数据绑定

11.9.1. 问题
我想绑定一个对象到属性上,该对象是进入某个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

方法参数如下:
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/mxmlwidth="450"
height="650title="Initial Titlelayout="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="18text="NEW TEXT 1"/>
<mx:Text fontSize="18text="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="richTextheight="200width="250creationComplete="BindingUtils.bindProperty(area, 'htmlText',
richText, 'htmlText')
"/>

</mx:AddChild>
<mx:SetProperty target="{this}name="title"
value="'Lame Old Title'"/>

</mx:State>
<mx:State name="secondaryState2basedOn="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 Stringid="cb"/>

<mx:TextArea height="100width="450id="area"
htmlText="foo bar baz"/>

</mx:Panel>

加支付宝好友偷能量挖...


评论(0)网络
阅读(93)喜欢(0)flash/flex/fcs/AIR