Proxy类可以在现有类的AS3中使用吗?

时间:2014-02-27 18:45:35

标签: actionscript-3 flash data-binding proxy

AS3 Proxy类扩展Object并公开您可以覆盖的方法,以通用方式处理对象上属性的添加/删除和设置。

看起来现有的对象(如MovieClip,Sprite等)不会从Proxy类继承,因此似乎排除了将这些功能添加到现有显示对象类的可能性。

我创建了一个布局框架,其基础显示对象类名为GUIControl,继承自MovieClip,我希望通过覆盖Proxy类的{{{{ 3}}方法,所以我可以使用单个处理程序处理属性赋值,以使所有属性默认用作绑定源。

是否有某种方法可以在现有类上使用Proxy类的功能,或者我是否因为基于代理而从头开始构建类?

2 个答案:

答案 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值作为键...一些字典支持不像关联数组或普通对象。