我正在学习pureMVC并尝试将框架实现到我的应用程序中。我有以下案例:
我的主要应用程序有Canvas,用于添加不同类型的自定义组件。其中一个自定义组件是“搜索组件”(在页面上创建多个实例)。我的搜索组件有一个文本文件和一个搜索按钮,并按以下步骤启动搜索:
1 - 单击搜索按钮调度自定义事件,该自定义事件将搜索组件的引用保留为属性。
2-My AppMediator监听自定义事件并获取当前搜索组件的引用以及搜索文本。
3-Mediator发送通知(sentNotification(AppConstants.SEARCH_CLICKED,component))。
4 - 我已使用SEARCH_CLICKED通知注册了一个命令。
5-Command检索WebserviceProxy并调用其搜索(文本)方法。
6-WebserviceProxy与远程webservice通信,并使用asyncToken获取结果。
我的问题是: My Command在开始搜索时引用自定义搜索组件,但搜索webservice需要一些时间并获得结果。如何将结果处理回发起搜索的自定义搜索组件。由于我有多个搜索组件实例。如果我在WebserviceProxy中添加一个变量以保留该引用并将结果交给它,或者我必须创建一个全局代理来保留这些组件的引用,那么保留该组件引用的最佳位置是什么?
由于
答案 0 :(得分:1)
我已经使用PureMVC多年了,我喜欢它!
我认为您还没有理解主要组件的角色和协作。
您不应该在命令和UI元素之间存在任何依赖关系。您的调解员必须从您的UI组件中获取具体值并通过通知发送。在这种情况下,命令和代理只会得到一个文本值,这是无关紧要的,它的来源是什么!假设您将在一段时间后更改UI,并且您将在用户端使用另一个组件来确定搜索值。在您的情况下,您将不得不更改代理和命令。这会很糟糕。
代理可能没有任何有关命令和调解器的信息。它只能提供其功能,让其他组件与之交互。它在获取后发送带有新信息的通知,而不知道谁对它感兴趣。
再次阅读框架说明并写下您的问题。 我在理解这些东西方面遇到了一些问题,我看到了你的问题。
答案 1 :(得分:0)
根据安东的回答,我重新思考并尝试将依赖关系分开。因此,我试图通过向Mediator的构造函数提供不同的ID来单独使用“SearchMediator”来调解Search Widget的每个实例。现在,当搜索小部件启动新搜索时,它的中介调用Command,Command调用Proxy方法进行实际搜索并从DB获取结果并发送通知。 SearchMediator负责处理该通知,并将结果移交给适当的UI。