1

我正在使用 PureMVC 编写一个 Adob​​e AIR 应用程序。

想象一下,我有一个基于页面的应用程序视图(使用 ViewStack),并且用户正在以某种方式浏览这些页面(例如单击按钮或其他)。

现在例如我有一个帐户信息页面,当实例化或再次显示时需要从 WebService 加载数据(例如电子邮件帐户余额用户名),当数据返回时,我想在我的帐户信息页面上显示它正确的标签。

问题是当我将执行这三个 Web 调用时,它们中的每一个都会在不同的时间返回不同的 resultEvent。我想知道获取所有服务调用返回结果的信息的最佳方法是什么,所以我知道我终于可以一次显示所有结果(也许在此之前播放一些加载屏幕)。

4

2 回答 2

0

我真的不太了解 PureMVC,但是 as3commons-async 库非常适合管理异步调用,并且在任何框架设置中都可以正常工作

http://as3commons.org/as3-commons-async/

在您的情况下,您可以创建 3 个类来实现IOperationIAsyncCommand(取决于您计划立即执行操作还是延迟执行操作)封装您的 RPC。完成后,您只需创建一个新CompositeCommand的并将操作添加到其队列中。全部完成后,CompositeCommand将发射一个OperationEvent.COMPLETE

顺便说一句,当您下载 as3commons-asyc-flex 包时,该库甚至包括一些预先实现的常见 Flex 操作,例如 HTTPRequest。

于 2013-07-24T12:12:43.070 回答
0

我会这样做:

  1. 为三个信息实体(EMailProxy、BalanceProxy、UsernameProxy)中的每一个创建一个代理;
  2. 创建一个委托类来处理与您的 WebService 的交互(类似于“公共类 WSConnector 实现 IResponder{...}”),代理使用它来调用最终的 ws 方法;
  3. 创建一个协调所有三个结果的代理(CoordProxy);
  4. 选择一个协调所有三个调用的中介(例如,它可以由您的 ApplicationMediator 完成);
  5. 为所有代理结果创建通知常量(GET_EMAIL_RESULT、GET_BALANCE_RESULT、GET_USERNAME_RESULT、COORD_RESULT);
  6. 让 ApplicationMediator 获得所有 4 个通知;

    • 重要的是,您不仅应该等待所有三个结果,而且还应该为一些错误及其解释做好准备。这就是为什么一个简单的计数器可能太弱了。

整个工作流程可能如下所示:

  1. 用户启动流程;
  2. 某些中介从您的 GUI 组件中获取事件并发送通知,例如 DO_TRIPLECALL;
  3. ApplicationMediator 捕获此通知,删除 CoordProxy 的状态并从您的代理调用所有 3 个方法(getEMail、getBalance、getUsername)。
  4. 响应是异步的。每个代理从委托中获取响应,更改自己的数据对象并发送适当的通知。
  5. ApplicationMediator 捕获这些通知并更改 CoordProxy 的状态。当所有三个响应都存在时(可能并非所有响应都成功),CoordProxy 会发送一个包含整体结果的通知。

我知道通过调解员进行这种互动并不是最好的方法。最初的想法是为所有“业务逻辑”决策使用命令。但是创建官僚机构可能太无聊了。

我希望它可以帮助你。我很高兴知道您的解决方案并在这里讨论。

于 2013-08-01T08:40:17.860 回答