AS3 Proxy
类扩展Object
并公开您可以覆盖的方法,以通用方式处理对象上属性的添加/删除和设置。
看起来现有的对象(如MovieClip,Sprite等)不会从Proxy类继承,因此似乎排除了将这些功能添加到现有显示对象类的可能性。
我创建了一个布局框架,其基础显示对象类名为GUIControl
,继承自MovieClip
,我希望通过覆盖Proxy类的{{{{ 3}}方法,所以我可以使用单个处理程序处理属性赋值,以使所有属性默认用作绑定源。
是否有某种方法可以在现有类上使用Proxy类的功能,或者我是否因为基于代理而从头开始构建类?
答案 0 :(得分:0)
您可以为MovieClip创建一个包装类,并在包装器上设置属性。您应该覆盖Proxy中的其他函数并在MovieClip上调用相关函数。
这是一个例子
import flash.display.MovieClip;
import flash.utils.Proxy;
import flash.utils.flash_proxy;
public class MovieClipWrapper extends Proxy
{
public function MovieClipWrapper(target:MovieClip)
{
super();
_target = target;
}
private var _target:MovieClip;
override flash_proxy function setProperty(name:*, value:*):void
{
//set data on target movieClip, or call the notify functions
}
}
答案 1 :(得分:0)
不,它不能用于现有的类。最糟糕的是,在任何显示列表类中排除使用Proxy。无法更改显示列表类上的属性并使Proxy类拦截并处理设置或获取此类属性值。代理仅作为新类(理想情况下为动态类)的基类,在设置/检索/删除属性时,您希望拦截和运行逻辑。
此外,代理对于尝试包装类似Dictionary类的内容毫无用处,因为Proxy的接口方法仅依赖于QName和String类型的键,这使得无法枚举,获取或设置使用对象实例的Dictionary值作为键...一些字典支持不像关联数组或普通对象。