「/services」と「/services/:service」という 2 つのルートを持つアプリケーションがあるとします。
ユーザーが :service 状態にアクセスしたときに、ある特定のサービスに関する情報のリストを表示してもらいたいと思います。これまでのところ、些細なことです。
ただし、同じユーザーが /services にアクセスすると、サービスのリストと、サービスごとの情報 (すべてのサービス)を表示したいと考えています。また、テンプレートを複製せずにこれを行いたいと思います。
明らかな答えはアウトレットのように見えましたが、すべてのアウトレットに静的な名前を付ける必要があるようで、以前は不明な数のアウトレットがありました。それらはすべて固有の名前を持っていますが、もちろん、テンプレートに名前をハードコードすることはできません。アウトレット名を動的に決定したいので、renderTemplate で this.render を適切に呼び出してそれらを埋めることができますが、その方法がわかりません。
何を提案しますか?
更新: {{template}} を使用して特定のケースを処理できるようですが、それは別のルートに接続していません。その方法を知りたいです。後でもっと複雑なことをするつもりですが、それは間違いなくより適切であり、それぞれのコントローラーにはまだコードの重複があります。
更新:私は最終的に独自の「dynOutlet」ヘルパーを作成しました。
// Define "dynamic outlets". These are just like normal outlets,
// except they dereference the outlet name.
Handlebars.registerHelper('dynOutlet', function(property, options) {
Ember.assert("Syntax: {{dynOutlet <property>}}", arguments.length === 2);
var context = (options.contexts && options.contexts[0]) || this,
normalized = Ember.Handlebars.normalizePath(
context, property, options.data),
pathRoot = normalized.root,
path = normalized.path,
value = (path === 'this') ? pathRoot : Ember.Handlebars.get(
pathRoot, path, options);
return Ember.Handlebars.helpers.outlet(value, options);
});
ただし、それが希望どおりに機能するかどうかはまだわかりません。