次のようなUIがあります。
+--------+---------------+
| model1 | model details |
| model2 | here, |
| model3 | loaded as the |
| | user selects |
| | a model from |
| | the left. |
| | |
+--------+---------------+
この UI を駆動するためにMVP パターンを使用しています。
ここではかなり単純化していますが、分割して征服するために、Presenter を 2 つに分割したいと思います。1 つは、左側のビューでユーザーのジェスチャーを処理します (ユーザーは、このビューでモデル リストを変更します。たとえば、並べ替え)。もう 1 つのプレゼンターは、右側のビューでユーザー ジェスチャを処理します (ユーザーは、このビューで個々のモデルを変更します)。
左側のプレゼンターはモデルのリスト全体とやり取りしますが、右側のプレゼンターは単一のモデルのみとやり取りします。つまり、ユーザーが左側のリストから選択したモデルです。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 を複数のプレゼンターで操作できますか?
- 複数のプレゼンターを分離する必要がありますか、それともここに示すように互いに直接通信できますか?
だから私の質問は次のようになります:ユーザーがのビューでモデルを選択したことを示す最良の方法は何RightPresenter
LeftPresenter
ですか?