通过设计决策或任何 Adobe 更改了 HTTPService 对象触发的 ResultEvent 的内容。
看看下面的例子:
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 一起工作就像一个魅力。但是当我尝试用 Flex 3.5 或 Flex 4.0 编译它时event.target 作为 HTTPService一片空白。
我发现 event.target 现在是一个实例HTTP操作。这很有趣,因为我找不到HTTP操作在 langref 中。不过,我认为Flash Builder的调试器的意思是mx.rpc.http.操作.
调试器还显示事件目标有私有属性http服务这是我期望得到的实例事件目标。但这是私人的,所以事件.target.httpService不起作用。
如果我只想删除 EventListener 我可以强制转换事件目标 as 事件调度器。但我需要使用以下方法HTTP服务.
那么:我怎样才能得到HTTP服务来自 ResultEvent 的实例?
任何帮助,将不胜感激。谢谢!
J.
如果您对此感兴趣,那么仔细阅读源代码会很有用。在 OS X 上rpc
课程在这里:/Applications/Adobe Flash Builder Beta 2/sdks/3.4.1/frameworks/projects/rpc/src
Inside mx.rpc.http.HTTPService
确实有一个名为的内部类HTTPOperation
。
它延伸mx.rpc.http.AbstractOperation
这反过来又延伸了mx.rpc.AbstractOperation
。里面AbstractOperation
是一个 getter 方法get service
它看起来会返回你需要的东西。
Since HTTPService
是一个内部类,它实际上是私有的,因此您需要转换为AbstractOperation
(任何一个mx.rpc.http.AbstractOperation
or 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);
}
edit:我把它收回!看起来 Adobe 正在发送null
当服务在构造 HTTPOperation 时调用 super 时。因此,HTTPService 仅缓存在私有变量中httpService
。我不知道他们为什么向你隐藏它,但看起来你必须保留自己的参考资料。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)