0

我正在学习 pureMVC 并尝试将框架实现到我的一个应用程序中。我有以下案例:

我的主应用程序有 Canvas,用于添加不同类型的自定义组件。自定义组件之一是“搜索组件”(在页面上创建多个实例)。我的搜索组件有一个文本文件和一个搜索按钮,并按以下步骤启动搜索:

1-单击搜索按钮调度一个自定义事件,该自定义事件将搜索组件的引用作为一个属性。

2-My AppMediator 监听自定义事件并获取当前搜索组件的引用以及搜索文本。

3-Mediator 发送通知(sentNotification(AppConstants.SEARCH_CLICKED, component))。

4-我已经注册了一个带有 SEARCH_CLICKED 通知的命令。

5-命令检索 WebserviceProxy 并调用其 Search(text) 方法。

6-WebserviceProxy 与远程 Web 服务对话并使用 asyncToken 获取结果。

我的问题是: 我的命令在开始搜索时引用了自定义搜索组件,但搜索网络服务需要一些时间才能得到结果。我如何将结果处理回启动搜索的自定义搜索组件。因为我有多个搜索组件实例。保留该组件引用的最佳位置是什么,我应该在 WebserviceProxy 中添加一个变量以保留该引用并将结果交给它,还是我必须创建一个全局代理来保留此类组件的引用?

谢谢

4

2 回答 2

1

我已经使用 PureMVC 几年了,我喜欢它!

我想你还没有理解主要组件的角色和协作。

  1. 您不应该在命令和 UI 元素之间有任何依赖关系。您的 Mediator 必须从您的 UI 组件中获取具体值并通过 Notification 发送它。在这种情况下,命令和代理将只获得一个文本值,不管它的来源是什么!假设您将在一段时间后更改您的 UI,并且您将在用户端使用另一个组件来确定搜索值。在您的情况下,您将不得不更改代理和命令。这会很糟糕。

  2. 代理可能没有关于命令和中介的任何信息。它只能提供让其他组件与之交互的功能,并且在获得新信息后发送带有新信息的通知,而不知道谁对它感兴趣。

再次阅读框架的描述并写下你的问题。我在理解这些东西方面也遇到了一些问题,我看到了你的问题。

于 2013-01-24T15:42:31.500 回答
0

根据安东的回答,我重新思考并尝试分离依赖。因此,我尝试通过向 Mediator 的构造函数提供不同的 ID 来分别使用“SearchMediator”来调解 Search Widget 的每个实例。现在,当搜索小部件启动新搜索时,它的中介调用命令,命令调用代理的方法进行实际搜索并从数据库中获取结果并发送通知。SearchMediator 会处理该通知并将结果移交给适当的 UI。

于 2013-02-26T07:58:01.813 回答