未理解的flex的数据绑定的两种方式
三、<mx:Binding>标签 ??????<mx:Binding>标签也是使用非常频繁的数据绑定方式。到底怎么个用法呢?下面以两个小示例使用不同的数据源来进行数据绑定演示。首先用<mx:Model>标签定义一个数据源(<mx:Model>标签就相当于的定义一个临时数据,这里不做详细介绍,不清楚它的作用的朋友请查阅相关资料学习)。<mx:Model>标签定义数据源如下:
?1?
????
<
mx:Model?id
=
"
books
"
>
?2? ???????? Books ?3? ???????????? Book ?4? ???????????????? Name ActionScript? 3.0 </ ?5? Author 张三 ?6? ?7? ?8? Flash?CS? 3 ?9? 李四 10? 11? 12? mx:Model > 1?
mx:Binding?source
books.Book[0].Name
?destination
txtName.text
?
/>
2?
books.Book[1].Name
txtAuthor.text
3?
????
4? mx:TextInput?x 95 ?y 71 ?id txtName ?fontSize 12 5? 115 txtAuthor /> private
?var?xml:XML
=<
????????????????????????????
????????????????????????????????
????????????????????????
?????绑定xml对象的数据和通过<mx:Model>标签定义的数据源没什么区别,详细如下代码块: xml.Book[0].Name
txtXmlName.text
xml.Book[1].Name
txtXmlAuthor.text
177
txtXmlName
225
txtXmlAuthor
?
?
四、BindingUtils与动态绑定? ??????在Flex中,动态绑定主要是通过BindingUtils类提供的两个静态方法来实现。该类位于包mx.binding.utils下,它提供了bindProperty()和bindSetter()两个静态方法来实现数据的动态绑定。 ?????bindProperty()方法根据名称就可以看出大概意思,绑定属性。那实际开发中我们应该怎么应用他呢?其实很简单,一句话概括就是:将xx的YY属性绑定到AA的BB属性。更清楚的理解这句话的意思见下面代码片段: ? <?
xml?version
1.0
?encoding
utf-8
?>
mx:Application?xmlns:mx
http://www.adobe.com/2006/mxml
?layout
absolute
mx:Script
<!
[CDATA[
????????????import?mx.binding.utils.BindingUtils; ???????????? ?var?myName:String? = ? 张?三 ;? internal ?function?onClick(): void ????????????{ ????????????????BindingUtils.bindProperty(nameText, text ,btn,0)">label ); ????????????} 13? ????????]] 14? 15? 84 83 nameText ?text "" 16? mx:Button?x 102 153 ?label 动态绑定 ??id btn ?click onClick() 17? mx:Application ? ?????这段代码很简单,在界面上分别放置了输入组件和一个按扭组件,然后定义了一个字符串(String)类型的变量myName,最后通过按扭的单击事件将按扭的"label"属性绑定到输入组件的"text"属性上。其实onClick()方法里的代码和下面这一句代码是完全等价的: this
.nameText.text?
.btn.label;
?????bindSetter()方法的使用也很简单,该方法绑定数据需要与setter类似的方法结合,将外部传递进去的参数进行方法委托实现数据的动态绑定,拿上面将按扭显示值绑定到文本输入组件的值的示例来说,只需要定义一个setter的方法,该bindProperty()方法为bindSetter()方法既可,详细见下面代码片段: //
BindingUtils.bindProperty(nameText,"text","label");
????????????????BindingUtils.bindSetter(bindText,0)">?function?bindText(text:String):
?text;
18? 19? 20? 21? 22? 23? > (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |