`

Flex Bindable

    博客分类:
  • flex
阅读更多
对一个类声明绑定,相当于给这个类里的所有属性都声明了绑定。等同于你把这个类里的所有属性都声明绑定。
那么这个类的属性如果发生了变化,则会触发绑定。

比如
[Bindable]
public ClassA{
//这里用static是为了调用方便,非static是一样的
public static var data:Object
}
如果在外面引用,比如<mx:Label text="{ClassA.data}" />
当data属性改变后,这个label是可以变化的。

但是有个细节要注意到,绑定之所以会被触发,是因为被绑定的对象的引用变化了,如果引用没有改变则不会触发绑定。详细举例来说明

刚才说到。ClassA.data其实也被声明了绑定,如果我们这么写
ClassA.data="Test Binding"是会触发绑定的,
因为,data属性从null变为了一个string

如果我们在定义data时,他不是一个基础类型(as里,基础数据类型是String,int,uint,Number),是一个封装类型时(XML,Object,Array。。。),我们就要考虑到在封装类型内部是否实现了抛出绑定。什么意思呢

如果这个data属性被定义为某个 不为null 的封装类,比如是一个Array
public static var data:object = [ {name:'user1'}, {name:'user2'} ];

如果我们在组件中这样引用
<datagrid dataprovider="{ClassA.data}"> ...<column datafield="name" />

当我们在代码中这样改变data时
ClassA.data[0].name="change!"

结果是:没有发生改变?为什么呢?

刚刚说到了,绑定是检测声明了绑定对象(或属性)的引用是否改变,实际上,我们声明只到达data这个属性(对象)为止,至于里面的每个元素的每个属性我们并没有绑定,如果这些发生了改变,绑定是不会触发的。

这点,即使不是对类进行绑定,直接绑定其他变量时也是相同遵守的。

因此,很多人使用bindable去绑定结果集的时候,对结果集的操作不会影响到引用的控件,
有种避免的办法就是对所有自定义类型对象都声明绑定,比如这个data属性,可以定义为User类,并对这个User类声明绑定。
这样只要单个对象有绑定,那么就不会存在这个问题,但是这样也带来不少麻烦,定义如此多的VO,也会很繁琐。
特别是如果不是使用的ro,而是用的httpservice之类的请求,返回结果都是xml、xmllist等对象的情况下,这个办法就不是很好用了。因为必须转换到自定义的集合中去。

因此绑定也并非是万能的,某些时候还是需要手动的去处理一下。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~以上来自RIACHINA

[Bindable]专门用来定义绑定中的数据源对象,
[Bindable]的用法:

1.变量前定义:使用[Bindable]后,下一行表达式定义的变量就可以被用在绑定中。

方法一:[Bindable]

方法二:[Bindable(event=”eventname”)] event事件名指当数据源发生变化时,

数据源所在对象派发的事件类型,它是可选的。如果不写,默认事件名是“propertyChange”

2.函数前定义:此函数必须通过setter和getter方式定义, [Bindable]要用在setter函数前面。

[Bindable]

public function set Num(n:Number):void{

num=n;

}

public function get Num():void{

return num;

}

虽然是方法,但使用时,也是用 . 语法,即 ~ . Num。

3. 公用类前定义:当使用了绑定标签后,这个类的所有公有变量,包括setter和getter都可以用于绑定。

package tree{

[Bindable]

public class myTest{

private var num:Number=0;

public var className:String=”aaa”; //可用数据绑定

public function set Num(n:Number):void{ //可用数据绑定

num=n;

}

public function get Num():void{

return num;

}

}

}
分享到:
评论

相关推荐

    Flex Bindable 的用法

    什么是元数据(metadata):[Bindable]大概又是Flex用得最多的元数据了。

    FLEX企业应用开发实战.part1

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    FLEX企业应用开发实战.part2

     2.4.5 使用Bindable元数据标记  2.4.6 绑定到函数、对象和数组  2.4.7 使用可绑定属性链进行工作  2.5 Flex中的组件化编程  2.5.1 认识Flex组件和组件容器  2.5.2 组件生命周期与布局  2.5.3 组件的...

    Flex企业应用开发实战源代码

    2.4.5 使用Bindable元数据标记 40 2.4.6 绑定到函数、对象和数组 43 2.4.7 使用可绑定属性链进行工作 46 2.5 Flex中的组件化编程 46 2.5.1 认识Flex组件和组件容器 47 2.5.2 组件生命周期与布局 51 2.5.3 组件...

    flex导出excel的代码

    [Bindable] private var dp:Array = [ {idx:1, names: "test1", sex: "b" }, {idx:2, names: "test2", sex: "g" } ]; public function doSelect(o:Object):void { Alert.show("行的数据分别是...

    Flex调用xml通过DataGrid遍历简单示例

    [Bindable] private var slides:ArrayCollection private function resultHandler(event:ResultEvent):void { slides = event.result.album.slide; } private function faultHandler...

    flex 绑定元数据

    算是flex初学者的的笔记吧,首先可以概览一下下文中的代码,然后我们主要是看看[Bindable]的这种用法。

    flex实列demo

    *" creationComplete="initTree();... change="iFrame.source=tree.selectedNode.path" /&gt; ... // TODO: determine whether we can ... // TODO: add some links here to Flex sites } ]]&gt; &lt;/mx:Application&gt;

    flexjava交互

    [Bindable] var result:String; function sendRequest(){ var name=name1.text; var password=password1.text; ro.validateLogin(name,password); ro.addEventListener(ResultEvent.RESULT,results); } function ...

    open flash chart 2 swc包

    open flash chart 2 的swc文件包 可以在flex里面调用了. [Bindable] private var chart:String='{ "elements": [ { "type": "bar","alpha":0.8,"colour":"#663366", "values": [ 0 ] } ], "title": { "text": "...

Global site tag (gtag.js) - Google Analytics