Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3245348
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2010-10-06 16:53:22

1.ObjectProxy概述
       主要是为了监控一个观察对象,当这个观察对象的值发生变化时,由该类派发相应的事件。
       如果不是你自己的类,你又希望绑定它,或你只是希望运行时添加绑定功能,你可以使用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


               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/mx"
               creationComplete="creationCompleteHandler()"
               minWidth="955" minHeight="600">
   
       
   

   
       
   

   
   
                    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();
            }     
        ]]>
   

   
     
     
     
   
   
   


运行结果
    EladElrom
    xxx
    userName
    false
    true
    true

参考文献
1.Flex 数据易犯错误: 常见误用和错误. http://www.adobechinadeveloper.com/Newsletter/May10/Essential_the_Articles/databinding_pitfalls_03.html
阅读(2629) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~