可能なオプションは 2 つありますが、どちらの場合も、必要なときにいつでもアクセスできるように、最初に を保存する必要がありますcurrentPath
。ApplicationController
var App = Ember.Application.create({
currentPath: ''
});
App.ApplicationController = Ember.ObjectController.extend({
updateCurrentPath: function() {
App.set('currentPath', this.get('currentPath'));
}.observes('currentPath')
});
計算されたプロパティの使用
次に、テンプレートをバックアップするコントローラーでNavigationController
、計算されたプロパティを作成ApplicationController
し、needs
API を使用してアクセスを収集する依存関係も定義し、CP で必要なものかどうかを確認するcurrentPath
とします。
App.NavigationController = Ember.Controller.extend({
needs: 'application',
showSubMenu: function(){
var currentPath = this.get('controllers.application.currentPath');
return (currentPath === "assortmentGroup");
}.property('controllers.application.currentPath')
});
{{#if}}
したがって、テンプレートで単純なヘルパーを使用できます。
...
{{#linkTo "assortmentGroup" this}} {{description}} {{/linkTo}}
{{#if showSubMenu}}
<ul>
{{#each itemCategories}}
<li>{{#linkTo "itemCategory" this}} {{description}} {{/linkTo}}</li>
{{/each}}
</ul>
{{/if}}
</li>
...
カスタム '{{#ifRoute}}' ヘルパーの使用
ただし、カスタム ヘルパーで条件を処理する必要がある場合は、次の方法で実行できますcurrentPath
。現在のルートの値を取得する方法が必要なため、アプリケーションに保存されている が引き続き必要であることに注意してください。
Ember.Handlebars.registerHelper('ifRoute', function(value, options) {
if (value === App.get('currentPath')) {
return options.fn(this);
}
else {
return options.inverse(this);
}
});
そして、次のように使用できます。
...
{{#linkTo "assortmentGroup" this}} {{description}} {{/linkTo}}
{{#ifRoute "assortmentGroup"}}
<ul>
{{#each itemCategories}}
<li>{{#linkTo "itemCategory" this}} {{description}} {{/linkTo}}</li>
{{/each}}
</ul>
{{/ifRoute}}
</li>
...
「カスタム ヘルパー」ソリューションの簡単なデモも参照してください: http://jsbin.com/izurix/7/edit
注: 2 番目の解決策には問題があります。ヘルパーはブロックをサポートしていないためbound
(Embers ハンドルバーのカスタマイズで)、バインディングに応じて条件を再評価しない単純なヘルパーを使用しましたが、これは必要なものではない場合があります。
それが役に立てば幸い。