浏览 4203 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-12
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" layout="absolute"> <mx:Script> <![CDATA[ import cn.sloppy.User; import mx.binding.utils.ChangeWatcher; import mx.controls.Alert; import cn.sloppy.TwoWayBinding; [Bindable] private var user:User; private function init():void{ user = new User("wenxing"); TwoWayBinding.create(myText,"text",user,"Name"); } private function showUserNameHandler():void{ Alert.show(user.Name); user.Name = "hello world"; } ]]> </mx:Script> <mx:TextInput text="{user.Name}" id="myText" x="118" y="31"/> <mx:Button x="118" y="77" click="showUserNameHandler()" label="Button"/> </mx:Application> package cn.sloppy { public class User { private var name:String; public function User(pName:String) { name = pName; } [Bindable] public function get Name():String { return name; } public function set Name(pName:String):void { name = pName; } } } package cn.sloppy { import flash.events.Event; import mx.binding.utils.ChangeWatcher; public class TwoWayBinding { public static function create(src1:Object, prop1:String, src2:Object, prop2:String):void { var flag:Boolean = false; ChangeWatcher.watch(src1, prop1, function(event:Event):void { if(!flag) { flag = true; src2[prop2] = src1[prop1]; flag = false; } }); ChangeWatcher.watch(src2, prop2, function(event:Event):void { if(!flag) { flag = true; src1[prop1] = src2[prop2]; flag = false; } }); } } } 以上是实现数据双向绑定的代码; User类是我自己写的,但在运行的时候就出现了ReferenceError: Error #1056: 无法为 cn.sloppy.User创建属性 name; 解决方法为TwoWayBinding.create(myText,"text",user,"Name"); "Name"第一个字母必须大写; 原理(本人的理解):因为我们只能通过user.Name去调用我们的getter方法,所有我们必须使用Name,这样也导致我们在定义类的私有属性是第一个字母必须小写不然也会报同样的错误。这是自己的理解哦 有意见请加QQ:305677472 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |