通过设计、退出或其他什么方式,Adobe更改了由ResultEvent对象触发的HTTPService的内容。
请看下面的示例:
var httpService:HTTPService = myHTTPServices.getResults();
httpService.addEventListener(ResultEvent.RESULT,resultHandler);
httpService.send();
/**
* Handels the login process
*/
function resultHandler(event:ResultEvent):void
{
// get http service
var httpService = (event.target as HTTPService);
// do something
}
它的工作原理就像Flex 3.2的魅力。但是,当我尝试用Flex3.5或Flex4.0编译它时,event.target作为HTTPService是空的。
我发现event.target现在是HTTPOperation的一个实例。这很有趣,因为我在langref中找不到HTTPOperation。但是,我认为Flash的调试器的意思是mx.rpc.http.Operation。
调试器还显示event.target有一个私有属性httpService,这是我希望通过event.target获得的实例。但是它是私人的,所以event.target.httpService不能工作。
如果我只想删除EventListener,我可以将event.target转换为EventDispatcher。但是我需要使用来自HTTPService的方法。
那么:如何从HTTPService中获取ResultEvent实例?
任何帮助都将不胜感激。谢谢!
J.
发布于 2010-06-09 21:57:43
如果您进入这个过程,查看源代码是非常有用的。在OS上,rpc
类在这里:/Applications/Adobe Flash Builder Beta 2/sdks/3.4.1/frameworks/projects/rpc/src
在mx.rpc.http.HTTPService
内部确实有一个名为HTTPOperation
的内部类。它扩展了mx.rpc.http.AbstractOperation
,而后者又扩展了mx.rpc.AbstractOperation
。在AbstractOperation
内部有一个getter方法get service
,它希望返回所需的内容。
由于HTTPService
是一个内部类,它实际上是私有的,因此您需要将其转换为AbstractOperation
( mx.rpc.http.AbstractOperation
或mx.rpc.AbstractOperation
)。
所以,就像:
function resultHandler(event:ResultEvent):void
{
// get the operation
var operation:AbstractOperation = AbstractOperation(event.target);
// get http service
var httpService:HTTPService = HTTPService(operation.service);
}
编辑:,我收回它!看起来Adobe正在为服务发送null
,当它在构造HTTPOperation时调用超级服务器。因此,HTTPService只缓存在私有变量httpService
中。我不知道他们为什么要瞒着你,但看起来你得把你自己的推荐信藏起来。
发布于 2011-11-17 06:45:05
我自己解决了这个问题。HTTPService
中有一些属性可以从AbstractOperation
中获得。例如,我使用属性request
,它是一个对象:
myService.request["service"] = myService;
然后,当我得到具有HTTPOperation
in event.currentTarget
的事件时,我会以这样的方式获得我的HTTPService
:
var eventService : HTTPService = HTTPService( AbstractOperation( event.currentTarget ).request["service"] );
https://stackoverflow.com/questions/3009010
复制相似问题