如何扩展ObjectProxy类

时间:2010-02-08 23:24:25

标签: flex actionscript-3

我试图扩展ObjectProxy类,原因是因为我想拥有一个ObjectProxy类的Singleton,所以我做了类似的事情

package utils
{
    import mx.utils.ObjectProxy;

    public class UniformObjectProxy extends ObjectProxy
    {
        private static var _instance:UniformObjectProxy;

        public function UniformObjectProxy(secure:PrivateClass, item:Object=null, uid:String=null, proxyDepth:int=-1)
        {
            super(item, uid, proxyDepth);
        }

        public static function getInstance(item:Object=null):UniformObjectProxy{
            if(UniformObjectProxy._instance == null){
                var security:PrivateClass = new PrivateClass();
                UniformObjectProxy._instance = new UniformObjectProxy(security, item);
            }
            return UniformObjectProxy._instance;
        }
    }
}

class PrivateClass{
    public function PrivateClass(){

    }
}

当我创建我的对象uniform这是一个简单的对象时,我将它传递给我的UniformObjectProxy.getInstance()静态方法来获取我的objectProxy的实例,好了到目前为止好了

我的问题是当我尝试绑定objectProxy实例的属性时,如

_opc = UniformObjectProxy.getInstance(_uniform);
cw:ChangeWatcher = BindingUtils.bindSetter(dispatchColorChange, _opc, data.id);

dispatchColorChange处理函数只调用一次,我再次检查ChangeWatcher.isWatching()并返回false意味着我的objectProxy没有正确绑定,如果我创建了一个像objectProxy

_opc = new ObjectProxy(_uniform);
cw:ChangeWatcher = BindingUtils.bindSetter(dispatchColorChange, _opc, data.id);

绑定工作得很好,所以我的想法是问题是当我扩展objectProxy类时,如何正确地做到这一点,请帮助我!,谢谢你的任何线索!!

1 个答案:

答案 0 :(得分:1)

扩展ObjectProxy似乎有问题(我个人在尝试覆盖setProperty方法时遇到了命名空间问题,并且觉得这个类并不意味着使用与Proxy类相同的方式)。

不是你问题的直接答案,但我想你不应该只是为了它而坚持单身模式。为了获得上述相同的访问/结果,我建议做这样的事情:

package utils
{
    import mx.utils.ObjectProxy;

    public class UniformObjectProxy
    {
        private static var _proxy:ObjectProxy;

        public function UniformObjectProxy()
        {
            throw("do not instantiate me!")
        }

        public static function getProxy(item:Object=null):ObjectProxy{
            if(_proxy == null){
                _proxy = new ObjectProxy(item);
            }
            return _proxy;
        }
    }
}

然后:

var _opc:ObjectProxy = UniformObjectProxy.getProxy(_uniform);