我有一个看起来像这样的用户界面:
+--------+---------------+
| model1 | model details |
| model2 | here, |
| model3 | loaded as the |
| | user selects |
| | a model from |
| | the left. |
| | |
+--------+---------------+
我正在使用MVP 模式来驱动这个 ui。
我在这里简化了很多,但为了分而治之,我想将 Presenter 分成两部分:一个处理左侧视图中的用户手势(用户更改此视图中的模型列表,例如排序)另一个 Presenter 在右侧的 View 中处理用户手势(用户更改此 View 中的单个模型)。
虽然左侧的 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
什么?