私の素晴らしいUMLダイアグラムを見たので、実際のものを続けることができます。
左側のサイドバーの葉がアクションを受け取ったとしましょう。このアクションは、メインビューの変更を担当するスコープ外の何かを変更したいですか?
コンテナコンポジット、個別のビューマネージャ、サイドバーコンポジット?
少し漠然とした、または主観的なものかもしれませんが、より深いレベルの入れ子になる場合にこれを行う最も一般的な方法を知りたいと思います。
私の素晴らしいUMLダイアグラムを見たので、実際のものを続けることができます。
左側のサイドバーの葉がアクションを受け取ったとしましょう。このアクションは、メインビューの変更を担当するスコープ外の何かを変更したいですか?
コンテナコンポジット、個別のビューマネージャ、サイドバーコンポジット?
少し漠然とした、または主観的なものかもしれませんが、より深いレベルの入れ子になる場合にこれを行う最も一般的な方法を知りたいと思います。
これに対する真の答えはありません。
1つの解決策は、Backboneが提供するイベントモデルを拡張して、アプリケーションレベルのイベントアグリゲーター(この手法に関するすばらしいブログ投稿はこちら)を作成し、複合ビューからイベントアグリゲーターにイベントをトスし、MainViewにイベントアグリゲーターをリッスンさせることです。適切なイベントのために、それに応じて自分自身を変更します。
別の解決策は、compviewの要素を適切なモデルとコレクションにバインドし、compviewのアクションでそれらのコレクションと要素を変更してから、それらが発行するイベントをリッスンすることでMainViewをそれらのモデルとコレクションに関連付けることです。上記の解決策に少し似ています。
さらに別の解決策は、MainViewを変更するメソッドを持ち、MainViewを変更する必要があるときはいつでも、compviewがコントローラーのメソッドを呼び出すようなコントローラーオブジェクトを作成することです。
別々のビューと要素の間の通信を実現する方法は他にもたくさんあると思いますが、これら3つは優れており、少なくともある程度は、コード内で適切なレベルの分離を維持できます。もちろん、アプリケーションレベルの通信にはイベント集約を使用し、単一モジュールレベルにはコントローラーを使用するなど、これらを組み合わせて使用することもできますが、それは単なるアイデアです。
あなたはknockout.compositeをチェックしたいかもしれません-http://danderson00.blogspot.com.au/2012/08/introducing-knockoutcomposite.html
この種のロジックを分離するために使用できるpubsubパターンを使用します。MainViewは、特定のメッセージをサブスクライブして、遷移を実行できます。メッセージは、CompViewから直接送信されるか、中間の「コントローラー」から送信される可能性があります。