すべてのサポートコンポーネント(メニュー、フッターなど)を、ビジネスコンポーネントと同じように扱うことを検討してください。また、UIコンポーネントのタイプに関係なく、UIコンポーネントごとに個別のビューモデルを用意することをお勧めします。これにより、コンポーネントが非常に緩く結合されます。
たとえば、メニューに独自のビューモデルが含まれている場合があります(グローバルビューモデルの一部ではありません)。これで、PubSubライブラリを使用してパブリッシャー/サブスクライブ通知を実装し、さまざまなUIコンポーネント(ビューモデル)間で疎結合の通信を行うことができます。この場合、ビジネスコンポーネントはイベントリクエストに従って表示/非表示になります。
ただし、特にメニューコンポーネントを実装する場合は、URLの変更(URLのハッシュタグ部分)に応答できるルーターライブラリを使用することをお勧めします。次に、ユーザーがメインメニュー(単純なアンカータグ)をナビゲートするときにURLを変更するだけで、コンポーネントがルーターライブラリによってアクティブ化/非アクティブ化されます。これにより、ブラウザの履歴ボタンをブックマークして使用できるようになります。
大規模なJavaScript開発のリファレンスアーキテクチャであるhttp://boilerplatejs.orgをご覧ください。上記のすべてがサンプルアプリケーションに実装されています。UrlControllerを使用して、URLの変更に基づいてコンポーネントをアクティブ化/非アクティブ化しますが、DomControllerは、コンポーネントをDOM自体に静的に配置するために使用されます(メニュー、フッター、ヘッダーなど)。ほとんどのサンプルUIコンポーネントにknockoutjsを使用しています。
免責事項:私はBoilerplateJSの創設者です