flash.utils.Proxy翻译及请教高手

Package flash.utils (点击进入adobe livedocs查看)
Class public class Proxy
Inheritance Proxy  Object
Subclasses AbstractService, DescribeTypeCacheRecord, ListCollectionView, ObjectProxy

Proxy类可以让您重载各种在对象上进行操作的原有行为(例如获取和修改成员的值).

Proxy类没有构造函数,所以您别想得到他的实例.相反的,正当方法是是在Proxy的子类中覆盖方法,例如利用getProperty重载方法以及产生自定义方法.如果您在Proxy的子类中尝试使用未被重载的Proxy类的方法,则会抛出例外.也就是说对于Proxy类的方法,您只有在重载之后才可以使用.

您要紧记一点,您重载Proxy类的方法会抛出一个不可交互例外.这是因为您的代码(比如有in, is, delete等操作符的)没有加入错误预处理,除非您确信您的方法不会抛出错误,Adobe建议您普遍使用try...catch语句来防止致命错误的产生.

在AS3中Proxy类替代了AS2中Object.__resolve 和Object.addPropery的功能特性(此二者在AS3已经不可用).AS2中的Object.addProperty()方法允许您动态的创建get/set方法.虽然AS3提供了get/set方法供您在编译环节使用,但使用Proxy类是动态的给对象添加get/set方法的唯一手段.

为了避免在公共命名空间中发生致命冲突,Proxy类的方法被放进了flash_proxy命名空间中.

将要作为name参数传入属于Proxy子类的方法中的变量,您使用字符串或者QName都可以(若命名空间被使用的话).

Protected Methods

callProperty(name:*, ... rest):*
重载某个对象的方法.
(宝宝入:这里的name不是指定要重载的方法,而是所有对本对象(即'this')的所有方法的调用都会交给callProperty来处理,您在callProperty函数中设计哪个函数需要重载以及如何重载的;或者说callProperty并没有重载了什么,而是callProperty函数的内容定义了重载的一切细节.  )
       
deleteProperty(name:*):Boolean
重载要求删除成员的方法.

getDescendants(name:*):*
重载对派生操作符的使用.

getProperty(name:*):*
重载查询成员的值.

hasProperty(name:*):Boolean
重载以成员名为依据在对象中进行查询是包含指定的成员的方法.
       
isAttribute(name:*):Boolean
查询一个QName是否同时被标记成属性了.

nextName(index:int):String
使用成员的索引从被代理的对象成员中检索出相应成员的名称.

nextNameIndex(index:int):int
使用序号来检索被代理的对象成员.

nextValue(index:int):*
使用被代理的成员序号来查询成员的值.

setProperty(name:*, value:*):void
重载各种对成员的赋值行为.


付:flash_proxy命名空间
此命名空间用于定义Proxy类的方法。Proxy类的方法都在他们自己的命名空间中,这么做的目的是为了避免在如下情形中出现命名冲突:您的Proxy子类拥有的实例方法名和Proxy类的方法名重合.

至于AS2的Object.watch方法偶实在是太怀念了
AS3没有了watch方法,偶实在很不爽
自己想了好久没有想出如何在AS3中实现
虽然可以在AS工程中导入FLEX工程的SWC来使用[Bindable]
但仍旧不及watch方法的便捷

----想要写一些能自动跟踪变量值工作的AS3东东出来
在AS2中只要让使用者把作为数据来源的变量引用指定到我的类的一个prop上就可以了
(自己的类中代码写的是:
     .........
     obj.parent.watch( obj,....... )
使用者只要来一句:
     xxx.dataSource = '_level0.a.b.variable'
就轻松完成数据绑定了!
)
但现在要怎样实现这样方便的功能呢?

虽然希望不是很大,但偶还是不死心----AS3的dataProvider好像可以做到使用者随便指定一个变量就可以去监视的
数据侦听~你令我魂牵梦萦
阅读更多

没有更多推荐了,返回首页