首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

对RemoteObject、AsyncToken的了解

2012-06-28 
对RemoteObject、AsyncToken的理解1、private var service:RemoteObject new RemoteObject(Cvbs-remote)

对RemoteObject、AsyncToken的理解

1、private var service:RemoteObject = new RemoteObject("Cvbs-remote");

?与

? ?private var service:RemoteObject = new RemoteObject();

? ?service.destination = "Cvbs-remote";

? 一致

?

2、var call:AsyncToken = service.executeFlex(data);

? 由于RemoteObject ? 继承的AbstractService 继承了Proxy 因此可以使用代理模式

? ?查看AbstractService?的源代码

? ?上面的代码与:

? ??var remoteMethods:AbstractOperation =?service.getOperation("executeFlex");

? ??remoteMethods.send(data);

? 一致

?

AbstractService?中代码:

?

public dynamic class AbstractService extends Proxy implements IEventDispatcher{       /**     * @private     */    override flash_proxy function callProperty(name:*, ... args:Array):*    {        return getOperation(getLocalName(name)).send.apply(null, args);    }    public function getOperation(name:String):AbstractOperation    {        var o:Object = _operations[name];        var op:AbstractOperation = (o is AbstractOperation) ? AbstractOperation(o) : null;        return op;    }    。。。}

?

3、无论何时从你的flex/AIR应用中使用多个外部调用中的一个,你都不会知道这些调用是否或者何时返回结果(或者错误),你也不会知道它们返回的顺序。即使你按照"RO1","RO2","RO3"的顺序调用远程对象,它们返回的顺序还是可能不一样。你可能也希望针对这些结果能有不同的处理。

? ? ? ?一种方式就是给每一个调用分配一个异步令牌(AsyncToken )来追踪这些调用。

? ? ? 不要这样来进行远程调用:

? ? ? ?myRO.myRemoteMethod();

? ? ? ?你应该这样:

? ? ? ?var token:AsyncToken=myRO.myRemoteMethod();(确保导入了mx.rpc.AsyncToken)

? ? ? 现在就有了一个变量"token",代表这个单独的调用。像这样,你可以分配token自己的result和fault处理函数

token.addResponder(myResponderClass);

? ? ?这里myResponderClass类实现了IResponder.实现Iresponder简单的意味着定义了如下两个方法签名:

? ? * public function result(data:Object):void

? ? * public function fault(info:Object):void

? ? ? 因此你可以对你的远程调用在调用时设置result和fault处理函数,而不用把硬编码放到你的远程对象,HTTPService或者WebService标签里。这也恰好就是Cairngorm和其他微体系结构的运行方式。

? ? ? ?AsyncToken最后一点很酷的特性就是它是动态类。这意味着,当你进行远程调用时可以添加属性到token上,然后result/fault处理函数中读取这些属性。

? ? ? ?另外,在flex sdk3.4中有CallResponder,可以用CallResponder实例的token属性引用这个异步令牌。在flex sdk3.2中式没有这个类的,如果要用的话就只能自己写了,只要这个类继承自Iresponder接口就可以了

?

?

?

?

?

?

热点排行