Flex学习笔记8——数据绑定
为模型和视图层传递数据提供了一种快捷的机制。以下场景不适用: ???????? 1)界面需要按严格顺序更新; ???????? 2)只有某些特定时期才需要告知属性的变化。 使用方法1.?????? {} :返回值类型必须与目的属性兼容,可以使用有返回值的函数、字符串连接符、算数和逻辑表达式。常用于定义视图上的控件属性随模型数据的变化而变化。 2.?????? <mx:Binding> : source属性可以使用 {} 包含表达式,用于1)模型上的数据随着控件的输入数据变化而变化。 2)建立同一目的属性与多个不同源属性的绑定关系 3.?????? BindingUtils:? 动态定义数据绑定,但很少使用。 定义方式源使用[Bindable]定义,产生propertyChangeEvent 事件 也可以定义事件的名称,如[Bindable(event=”fooChanged”)] ,这样需要自己创建或发出该事件才能触发事件绑定(不推荐)。 属性??? Public类:全部的public变量、具有get和set的属性 函数a)?????? 可绑定的属性作为函数的参数,实例如下: ????????? <mx:TextArea text=”{usdFormater.format(a)}”> b)?????? 带返回值的函数作为数据源 常用于某一个属性对外只提供get方法,该值在类内被改变时,调用地方能通过get方法取得新值 private var _contacts:ArrayCollection; [Bindable(event="contactsChanged")] public function get contacts():ArrayCollection { return _contacts; } // Stores given contacts and the current search keyword public function saveContacts( list:ArrayCollection,searchKey:String ):void { _contacts = list; //trigger binding by dispatching change event dispatchEvent( new Event( "contactsChanged" ) ); lastSearch = searchKey; }
对象?????????? 如果想让对象绑定起作用,需要保证对象和对象所属类都绑定,如 ?????????? ? Private var foo:MyObject;?? {foo.name}如果要起作用,则MyObject的name属性和foo对象都要绑定 ?????????? 将Object类的属性绑定:使用ObjectProxy对象,如Object info=new ObjectProxy(); 数组???????? 使用ArrayCollection作为绑定源,且使用 getItemAt访问数据元素,如下: [Binable] Public var myAC:ArrayCollection=new ArrayCollection([1,3,5]); <mx:Text id=”text2” text=”{myAC.getItemAt(0)}”> //如果使用myAC[0]则只在引用或数组引用更新时触发,而0的元素变化时不会触发 发生时机???????? 源属性被改变 ???????? 源对象发出initialize事件时 ???????? 调用executeBinding()方法 可以使用mx.binding.utils.ChangeWatcher观察数据绑定,观察者在数据绑定发生时,会激活一个事件,如 ChangeWatcher.watch(textarea,”text”,监听函数) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |