<?xml version="1.0" encoding="utf-8"?><mx:Application creationComplete="callLater(init)" xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" minWidth="955" minHeight="600" fontSize="12"> <mx:Script> <![CDATA[ import mx.collections.ArrayCollection; /* 在Flex3中我个人习惯使用的绑定方式为直接为元素添加[Bindable]标签,并在需要进行绑定的地方使用Bindable 下面列出一系列简单的例子来说明这种方法的灵活多变的应用。你可以发现,Flex3实际上就是面向数据的设计语言。 注:所有Flex3程序均考虑在网络情况下的正常运行并且拥有自己的解决方案。 */ //实例1:简单值绑定 [Bindable] public static var _str1:String = ""; [Bindable] public static var _str2:String = ""; //实例2:true,false的绑定 [Bindable] public static var _year:int = 18; //实例3:三元表达式 //实例4:方法 [Bindaable] public static var _money:int; public static function changeValue(year:int,hasMoney:int):Boolean { //你可以在这里添加逻辑判断,当然方法可以有更多的参数, //但是需要注意,方法中被传入的参数需要至少1个属于具有[Bindable]标签的,否则你会发现显示并不会立即改变 //也就是说,当你用到方法绑定来返回你需要的信息时候,方法必须是具有参数的,并且满足标签条件 return false; } private static function init():void { //你可以在这里添加类似定时器或帧监听来不断的改变你要测试的值 /*上面给出的为最常见的绑定办法,当然同样根据不同的组件(包括自定组件同样可以绑定更多类型 比如数组的绑定需要用到ArrayCollection),数据Bindable在Flex3中实在太过于灵活,只要你能想 到的,都可以在Mxml与基于UI开发的组件中进行自动绑定操作,无论是对象,方法,字符串。 下面给出在数据绑定时的注意事项与易错处: 1,如果你拥有一个静态数据对象,并且整个应用程序只会有一个这样的数据对象,那么最好将它在 Application的初始化过程中进行引用。比如new XXX();这里值做声明不做赋值,为什么呢?当你的 应用程序具有其他Module文件的时候,要想所有Module都能引用到这个数据对象并保持数据一致, 那么就按照我说的做。否则你会发现实际上静态对象在新的模块中会被重新初始化,那么值钱赋值 就会失效。 2,自定义对象的属性设置set get方法可以来绑定Fuction以及其他类型的数据。而只声明的公共成员变量 同样可以灵活的进行数据绑定,所以并非所有的都需要编写方法 3,在大小判断中{}标签里是不允许有<符号的,那么一般换用>=符号来做操作 4,如果同一个控制绑定中出现了多个判断条件,一般我推荐利用方法传入多个参数的方式进行绑定,同时 在方法里面你还可以根据判断的结果来改变提示信息的绑定。同样,你如果不想写方法进行绑定,也可以 利用三元表达式嵌套的方式进行绑定 5,一般一个显示对象内部绑定数据,如果数据的维护在上层或其他管理对象中,一般我们直接用此显示 对象的Data进行赋值操作,所有Data都是自动绑定的,所以你不需要再专门考虑绑定的事情,而现实对象 自身只需要对自己的Data进行显示即可,更由于Data属于可扩展对象,所以他很方便。 6,在用到具有翻页功能组件时,建议你在每页条目不多的情况下,提前创建显示所需条目书,然后用自定义 翻页组件以及对每个组件的Data进行绑定的方式控制ArrayCollection来达到显示效果,这样你会发现你 不需要去关心显示的问题。 7,所有你可以在mxml源代码页面提示出的字段都可以进行绑定,包括x,y,right等,但是不建议绑定拼装 界面的缩放,这样你会发现你的界面在不停的闪动。 8,所有绑定处,如果界面构成是不改变的,就只需要保证最顶层具有[Bindable]标签,比如你具有一个数组, 同时将ArrayCollection.getItemAt(0..n).xxx分别绑定到了不同的界面上,而这个时候你要做的操作是控制 ArrayCollection中的数据而非改变其中某个对象的某个值,那么你只需要给数组添加标签。但是编译器会 提示你不能绑定到指定的属性,不用理会他!你要做的就是remove和add操作后reflush一次就ok了。 因为绑定的数据对象显示改变原理还是基于事件的,如果最顶层的数组发生变化,他势必会通知内部其他 相关绑定到的显示界面重新获取数据。但是,当你不需要操作数组而只想操作数组中某些对象值的时候, 你便需要在显示到并且可能改变的变量上同样添加标签 9,一般我建议大家在非静态数据对象中不要使用static的数据用于绑定。具体原因就等大家自己去发现吧。 10,数据对象在不同分布式模块中被重复引用并不会导致重复编译。*/ //其他更多的科学灵活的绑定规范就更具自己的需要慢慢发现吧 } ]]> </mx:Script> <mx:Label x="42" y="25" text="实例1:的绑定对象{_str1}这里也可以添加"/> <mx:Button enabled="{_year>=18}" x="42" y="53" label="满18岁了吗?->"/> <mx:Button enabled="{_year>=18}" x="42" y="85" label="{_year>=18?'你已经成年了':'未成年'}"/> <mx:Button enabled="{changeValue(_year,_money)}" x="42" y="117" label="{_year>=18?'你已经成年了':'未成年'}"/></mx:Application>