`
horse88sky
  • 浏览: 3949 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

FLEX的ObjectProxy

阅读更多
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_
分享到:
评论
3 楼 shlei 2011-04-18  
smithfox 写道
ObjectProxy也只能处理你例子中的UserInfo这样的flat类, 不能处理有nested field的类,
详见我的blog文章:  http://www.smithfox.com/?e=96

看了,不错,既然有漏洞,我也就每必要深耕了,我也从没那样写过,我都是用自定义事件派发,或系统事件监听,基本上够用了。
2 楼 smithfox 2011-03-07  
ObjectProxy也只能处理你例子中的UserInfo这样的flat类, 不能处理有nested field的类,
详见我的blog文章:  http://www.smithfox.com/?e=96
1 楼 smithfox 2011-03-04  
不知道什么情况下用ObjectProxy,什么情况下用ChangeWatcher?

相关推荐

    flex3 json官方包

    JSON在Flex3中的使用涉及到两个主要类:`JSON`和`ObjectProxy`。`JSON`类提供了一系列静态方法,如`parse()`和`stringify()`,用于在ActionScript对象和JSON字符串之间进行转换。`parse()`方法接收一个JSON字符串并...

    Flex_JSON_XML.zip_flex

    - **Flex解析JSON**:Flex提供了`ObjectProxy`和`ArrayCollection`来处理JSON数据,可以方便地将JSON对象转换为Flex中的数据结构。 - **Java生成JSON**:Java有许多库支持JSON,如Jackson、Gson、org.json等。这些...

    Flex高级数据绑定实例(界面语言切换)

    3. **ObjectProxy**: `ObjectProxy`是Flex提供的一个特殊类型的对象,它可以作为数据绑定的目标。使用`ObjectProxy`可以提高性能,并支持更复杂的绑定逻辑。本示例中,`langInfo`变量即为`ObjectProxy`类型。 4. **...

    flex 操作XML

    - Flex提供了`mx.utils.ObjectProxy`类和`mx.rpc.xml.XMLUtil`类来处理XML。你可以使用`new XML()`创建一个空的XML对象,并通过`.addChild()`、`.appendChild()`等方法添加元素。 3. **读取本地XML文件**: - ...

    flex 调用websevice的例子

    Flex提供了`ObjectProxy`和`XMLListCollection`等工具类来帮助处理这些数据。 6. **使用HTML模板**:在提供的`html-template`目录中,通常包含Flex应用程序嵌入到HTML页面的方式。这使得Flex应用可以通过浏览器访问...

    Flex试题 .txt

    解决方法是使用ObjectProxy类,它可以充当IEventDispatcher,从而允许在任何对象上进行数据绑定。 ### 8. MVC架构中,AS3时是写在MXML还是AS文件中? 在Flex中,MVC架构被广泛采用,其中MXML用于定义视图,而...

    Flex + LCDS + Java 入门教程

    同时,我们还将讨论数据管理和状态管理,如使用ArrayCollection和ObjectProxy处理数据,以及维护用户会话状态。 此外,教程还会涉及实时通信,如使用LCDS的LiveCycle Collaboration Service实现实时消息传递。这...

    在Flex中使用Json (1)

    在Flex中使用JSON,首先需要了解两个关键的类:`flash.utils.ObjectProxy`和`flash.net.URLLoader`。`ObjectProxy`允许你通过代理方式操作JSON对象,使其更易于访问和处理。`URLLoader`则用于加载远程数据,例如从...

    Flex 3 基础教程4)

    当 `Model` 中的数据需要作为数据源时,由于其默认为 `Object` 类型,通常需要转换为 `ObjectProxy` 类型以实现绑定。 关于 `Bindable` 标签,它有以下用途: - 当应用于函数(setter 和 getter)时,称为函数级别...

    Flex 对象调用之间的 数据传递 包括 页面调用之间的数据传递 -

    在Flex中,`flash.utils.ByteArray`类可用于数据的二进制操作,而`XML`和`ObjectProxy`则提供了对象和XML之间的转换。 总的来说,Flex中的数据传递是一个复杂而重要的主题,涉及到组件通信、事件处理、数据管理等多...

    java调用openamf实例,把取回的结果转换成list或bean.

    Java调用OpenAMF是一种将Java应用程序与使用Adobe Flex或ActionScript 3的客户端进行通信的方式。OpenAMF是一个开放源代码的AMF(Action Message Format)桥接库,允许跨语言的数据交换,使得Java服务器可以与Flex或...

    AdvancedDataGrid 对sdk3.5不支持,对3.2支持方案(合并单元格)

    有些第三方库或组件,如FlexLib或mx.utils.ObjectProxy,提供了与Flex SDK 3.5兼容的单元格合并功能。这些库通常已经解决了与新版本SDK的兼容性问题,可以作为快速解决的手段。 5. **回退到Flex SDK 3.2**: 如果...

    AS3 JSON 包

    在ActionScript 3(AS3)中,JSON同样扮演着重要的角色,使得AS3可以方便地与服务器进行数据交互,尤其是在Flash或Flex开发中。 在AS3中,处理JSON主要依赖于`flash.utils.ObjectProxy`和`flash.utils.JSON`这两个...

    聊天室(ActionScript 3.0实现)

    通过深入研究这个聊天室项目,你可以提升ActionScript 3.0的编程技能,理解网络通信和实时交互应用的实现原理,这对于从事Flash或Flex开发工作的人来说是非常有价值的。同时,这些基础概念也可以迁移到其他编程语言...

Global site tag (gtag.js) - Google Analytics