私は、継承された Ember アプリケーションのリファクタリングに取り組んでいますが、mvc 以外の障害がかなりあります。私は物事を可能な限りモジュール化することを目指しており、コードの重複を防ぐために複数の画面でさまざまな UI コンポーネントを再利用したいと考えています。
これを行うには、アウトレットが最適な方法のようです。
現在、多数の要素を表示する UI があり、それぞれがテンプレート化されたビューを使用してレンダリングされています。
{{#each item in controller}}
{{view App.ItemThumbView}}
{{/each}}
このビューの右側のサイドバーは、選択に基づいて変化するアウトレットです。項目を選択すると、テンプレート化されたサブビュー内に編集操作のリストを表示したいと考えています。これを選択すると、ネストされたアウトレットを通じて適切な編集 UI が表示されます。
本質的に
+---------------------------------------------------+
| Parent Pane
|
| +------------------------------+ +----------+
| | Device Section | | Sidebar |
| | | | [Outlet] |
| | +--------+ +---------+ | | |
| | | Dev 1 | | Dev 2 | | | |
| | |[outlet]| | [outlet]| | +----------+
| | +--------+ +---------+ |
| +------------------------------+
+--------------------------------------------------+
ネストされたビューはすべて同じコントローラーを共有しますが (これは理にかなっています)、選択したビューを対応するアウトレットに接続できるようにする必要があります。コンセントを接続する最初の試みが表示されません。コードはまったく失敗しないため、コントローラーは非表示のアウトレットを更新しているだけです。
Ember でネストされたビューの正しいアウトレットをターゲットにするにはどうすればよいですか? (せいぜい、サイドバーのアウトレットにはヒットできるようですが、ネストされたデバイス テンプレート内のアウトレットにはヒットできないようです。) そして、これはそもそも ember でコンテキスト メニューを実装するための合理的な構造ですか?
*明確にするために、現在のセットアップでは、各デバイス アイテムは同じテンプレートを使用してレンダリングされます。選択すると、サイドバー アウトレットが一部のデバイスのメタ情報で更新され、選択されたデバイス ビューもそのアウトレットを編集メニューに接続します。一度に 1 つのデバイス項目だけが「編集」アウトレットに接続されます。
ここでアウトレットを使用することは理にかなっていますか?それとも、必要に応じて編集メニューを表示するために条件付きロジックをテンプレートにドロップする必要がありますか?
更新して、質問のベスト プラクティスの部分を言い換えます。
アウトレットは、コンポーネントのデカップリング、および潜在的なビューのネストの将来性を保証するのに最適なようです。しかし、現時点では、ネストされたビューの正しいアウトレットにアクセスするのは少し面倒です。さらに、テンプレート内で条件付きでネストされるコンポーネントが常にわかっている場合は、ビューをハードコーディングするのが最も簡単なようです。例えば:
// within template used for individual result-list items
{{#if condition }}
{{view reusableSubView}}
{{/if}
ここで物事を行うための好ましいエンバーの方法は何ですか? 常に接続されているとは限らないコンセントを作成することでオーバーヘッドは発生しますか?