【发布时间】:2009-02-23 04:29:52
【问题描述】:
我有一个如下所示的用户界面:
+--------+---------------+
| model1 | model details |
| model2 | here, |
| model3 | loaded as the |
| | user selects |
| | a model from |
| | the left. |
| | |
+--------+---------------+
我正在使用MVP pattern 来驱动这个用户界面。
我在这里简化了很多,但为了分而治之,我想将 Presenter 一分为二:一个在左侧的 View 中处理用户手势(用户更改此 View 中的 Model 列表,例如排序)和另一个在右侧视图中处理用户手势的 Presenter(用户更改此视图中的单个模型)。
虽然左侧的 Presenter 与整个模型列表交互,但右侧的 Presenter 仅与单个模型交互:用户从左侧列表中选择的模型。 IOW ui 是从左到右驱动的。
用户选择(即点击)左侧的模型后,我当前的实现(大致)如下所示:
LeftPresenter.onModelClick = function(event) {
var model = this.getModelFromEvent(event);
this.view.setSelectedModel(model); // updates list widget on left
RightPresenter.setSelectedModel(model); // notify the other Presenter
}
RightPresenter.setSelectedModel = function(model) {
// lazy load the model from the db, and update the
// view when the model fires the "loadComplete" event
model.bind('loadComplete', this.view.setModel);
model.lazyLoad();
}
这是我对 MVP 模式或任何 MVC GUI 模式的模糊部分:
- 一个 ui 可以像这样由多个 Presenter 驱动吗?
- 应该将多个 Presenter 解耦还是可以直接相互通信,如此处所示?
所以我的问题归结为:向RightPresenter 表明用户在LeftPresenter 的视图中选择了一个模型的最佳方式是什么?
【问题讨论】:
标签: model-view-controller mvvm mvp