浏览 3162 次
锁定老帖子 主题:FLEX的ObjectProxy
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-03-03
主要是为了监控一个观察对象,当这个观察对象的值发生变化时,由该类派发相应的事件。 如果不是你自己的类,你又希望绑定它,或你只是希望运行时添加绑定功能,你可以使用ObjectProxy类。 ObjectProxy封装一个没有绑定的类并在这个被绑定类的任何属性改变时派发属性改变事件,使得你能监听你程序里的该对象的属性改变。 2.ObjectProxy常见属性和方法 属性 uid : String 此对象的唯一标识符。 方法 addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void 注册事件侦听器对象,以便侦听器能够接收事件通知。 hasEventListener(type:String):Boolean 检查是否该对象及父对象为特定事件类型注册了任何事件侦听器。 willTrigger(type:String):Boolean 检查是否用此对象监听某种类型的事件,与hasEventListener有什么区别? 3.ObjectProxy举例 例1:ObjectProxy监控观察对象UserInfo。接着我添加了一个事件监听,来跟踪UserInfo各项的改变。 UserInfo.as package { public class UserInfo { public var userName:String="xxx";//如果没有初值,则PropertyChangeEvent 中的oldValue为null public var password:String="123"; public function UserInfo() { } } } ObjectProxyExam1.mxml <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" creationComplete="creationCompleteHandler()" minWidth="955" minHeight="600"> <s:layout> <s:VerticalLayout/> </s:layout> <fx:Declarations> <!-- 将非可视元素(例如服务、值对象)放在此处 --> </fx:Declarations> <fx:Script> <![CDATA[ import mx.events.PropertyChangeEvent; import mx.utils.ObjectProxy; import mx.utils.object_proxy; private var userInfo:UserInfo = new UserInfo(); private var objectProxy:ObjectProxy; protected function creationCompleteHandler():void { objectProxy = new ObjectProxy( userInfo ); objectProxy.addEventListener( PropertyChangeEvent.PROPERTY_CHANGE, onPropertyChange ); //这里不用写userInfo.userName,好象userName就是objectProexy的属性一样 objectProxy.userName = "EladElrom"; //objectProxy.password = "123456"; //与上面赋值效果相同 lb4.text=objectProxy.willTrigger("delete").toString();//没有监听这个事件 lb5.text=objectProxy.willTrigger(PropertyChangeEvent.PROPERTY_CHANGE).toString();//监听了这个事件 lb6.text=objectProxy.hasEventListener(PropertyChangeEvent.PROPERTY_CHANGE).toString();//监听了这个事件 } private function onPropertyChange( event:PropertyChangeEvent ):void{ lb1.text = event.newValue.toString(); lb2.text = event.oldValue.toString(); lb3.text = event.property.toString(); } ]]> </fx:Script> <s:Label id="lb1" /> <s:Label id="lb2" /> <s:Label id="lb3" /> <s:Label id="lb4" /> <s:Label id="lb5" /> <s:Label id="lb6" /> </s:Application> 运行结果 EladElrom xxx userName false true true 参考文献 1.Flex 数据易犯错误: 常见误用和错误. http://www.adobechinadeveloper.com/Newsletter/May10/Essential_the_Articles/databinding_pitfalls_ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-03-04
不知道什么情况下用ObjectProxy,什么情况下用ChangeWatcher?
|
|
返回顶楼 | |
发表时间:2011-03-07
ObjectProxy也只能处理你例子中的UserInfo这样的flat类, 不能处理有nested field的类,
详见我的blog文章: http://www.smithfox.com/?e=96 |
|
返回顶楼 | |
发表时间:2011-04-18
smithfox 写道 ObjectProxy也只能处理你例子中的UserInfo这样的flat类, 不能处理有nested field的类,
详见我的blog文章: http://www.smithfox.com/?e=96 看了,不错,既然有漏洞,我也就每必要深耕了,我也从没那样写过,我都是用自定义事件派发,或系统事件监听,基本上够用了。 |
|
返回顶楼 | |