<?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>
Flex3绑定
最新推荐文章于 2024-07-16 07:16:59 发布