管理Flex和Javascript之间的监视式回调
Managing monitoring-style callbacks between Flex and Javascript
我们目前有一些Javascript代码依赖于Flex通过ExternalInterface回调来完成一些繁重的工作。这不是世界上最漂亮的东西,但它有效。在Flex端,我们这样定义(remoteCall是一个具有典型RemoteObject行为的包装器):
ExternalInterface.addCallback("doOperation",
function(data:String, windowId:String):void { doOperation(data, windowId) });
private function doOperation(data:String, windowId:String):void {
remoteService.remoteCall(data, function(e:ResultEvent):void {
ExternalInterface.call("doOperationComplete", windowId, e.result);
});
}
Javascript端是:
function doOperationComplete(windowId, result) {
var win = windowHandles[windowId];
win.handleResult(result);
}
这对于我们的大多数用例都很好,但是我要实现一些基本的任务监视,我希望有更好的方法。如果我从上面的相同路径开始,我最终会得到一个场景,其中有一个JS -> Flex调用来获取任务状态。该调用返回void,当该调用完成时,有一个Flex -> JS调用来给JS任务状态。然后JS需要查看状态并采取一些行动:放弃,对结果做一些事情,在延迟后再次检查状态(另一个JS -> Flex, Flex -> JS循环)。
我还没有开始编写这个代码,但看起来它很快就会变得非常复杂,包括管理多个任务,将Flex调用与原始回调相关联,传递适当作用域的数据等。
有好的替代方案吗?某种Javascript任务插件,是专为这种回调场景?是我忽略的设计模式吗?甚至一些有问题的技术,如同步远程服务调用,使doOperation
返回任务状态而不是void?
我会像Adobe做IResponder那样做。
创建一个对象,当你使每个调用负责处理调用,并有一个"点"的其他数据,你想与特定的调用相关联(如IResponder中的AsyncToken)。该对象应该在往返结束时调度一个事件,并且您可以使用该事件来获取对"点"或具有该点的对象的引用。
我在纯Flash中这样做是为了使处理数据读/写更干净一点。我将Loader包装在另一个类中,该类会记住调用的信息,并在调用完成时生成一个COMPLETE事件。当我得到COMPLETE事件时,我从包装器中读取相关信息并处理整个事件。
我的回忆是,这与RemoteObject和HTTPService代码的工作方式不同,但在思想过程中是相似的。您可以使用F3转到其中一个或另一个的源代码,看看Adobe是如何处理它的,并尝试在您自己的任务中遵循模式。
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 承诺在非节点式回调上使用Bluebird
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- Soundcloud Javascript SDK 3.0-回调无法读取属性'connectCallback
- 如何使用jqueryAJAX从页面中回调多个变量
- jquery Onclick函数带有导致双击的回调排序函数
- Javascript点击事件回调不起作用
- 一旦加载并渲染了角度引导typeahead,就使用回调
- 成功回调永远不会被JSONP请求调用
- Sinon似乎没有监视事件处理程序回调
- 管理Flex和Javascript之间的监视式回调