Flex Data Binding详解(下)
接着上一篇继续讲:
? 数据绑定除了用[Bindable]标签来申明以外,也可以用<mx:Binding/>组件和ActionScript实现。? 用<mx:Binding/>,例如:? <mx:binding source="text1.text" destination="text2.text"/>? <mx:binging source="text2.text" destination="text1.text"/>? <mx:TextInput id="text1"/>? <mx:TextInput id="text2"/>? source为绑定源,destination为目的源,按上面的写法,不论是text1还是text2发生变化,都会引起对方的变化。细心的你也许会想这不会引起死循环吗?答案是否定的,不会引起死循环。我想应该是Flex内部的机制已经优化了这种情况,让其只触发一次。? 用ActionScript来绑定:??1.使用bindProperty()。???bindProperty(site:Object, prop:String,host:Object, chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:?? var myc:ChangeWatcher=BindingUtils.bindProperty(text2,"text",text1,"text");?? 即当text1的值发生变化时text2也跟着变,site为目的对象,prop为目的属性,host为绑定源,china为绑定源属性链——关于属性链下面再讲,commitOnly默认为False,即不管是确认事件还是未确认事件都将触发绑定,而为True时,只有确认事件才能触发绑定,这个一般用不到,和Flex自身的事件机制有关,如果为false的话,当数据改变时将触发两次绑定事件,当为True时,只触发一次,自己可以用bindSetter方法来做测试。当不想绑定时可以用myc.unwatch()方法来解除绑定。??? 2.使用bindSetter()。? bindSetter(setter:Function, host:Object,?chain:Object,commitOnly:Boolean = false):ChangeWatcher,例如:? var myc:ChangeWatcher=BindingUtils.bindSetter(change,text1,"text",true);? private function change(str:String):void?