FLEX的ObjectProxy

编程技术  /  houtizong 发布于 3年前   55
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
<?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_

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客