ヘルパーから与えられたルートのURLを生成する必要があります。ヘルパーからRouter.generateを呼び出す
How to generate url for a route in Ember.js私は生成機能を使用するように指示しました。はい、私は必要とする(アプリケーションルートをグローバルにすることによって機能をチェックしました)うまくいきます。しかし、私はどのようにヘルパーの中からそれを呼び出すか分からない。
ヘルパーから与えられたルートのURLを生成する必要があります。ヘルパーからRouter.generateを呼び出す
How to generate url for a route in Ember.js私は生成機能を使用するように指示しました。はい、私は必要とする(アプリケーションルートをグローバルにすることによって機能をチェックしました)うまくいきます。しかし、私はどのようにヘルパーの中からそれを呼び出すか分からない。
あなたは良い方向にあったので、主にこの問題を解決しました。 :) Emberには、単純な関数ヘルパーとClass Based Helpersの2種類のヘルパーがあります。この場合、クラスベースのヘルパーを使用します。
リンクされた例で見たように、メインルータにアクセスする必要があります。 Ember.getOwner(this).lookup('router:main')
でこれを行うことができます。 (Ember.getOwner()
exists from v2.3、V2.3の使用this.container.lookup('router:main')
前)
たとえば、あなたがrouter.js
でこのマップを持っている:
Router.map(function() {
this.route('about');
this.route('posts', function() {
this.route('post', {path: '/:post_id'});
});
});
そして、あなたはあなたのテンプレートが含まれている可能性がurl-for
の名前の例のためのヘルパーを作成した場合をこれらの行:
{{url-for 'about'}}
{{url-for 'posts'}}
{{url-for 'posts.post' 2}}
そして、あなたのクラスベースのヘルパーは、次のことができます:
// app/helpers/url-for.js
import Ember from 'ember';
export default Ember.Helper.extend({
router: Ember.computed(function() {
return Ember.getOwner(this).lookup('router:main');
}),
compute([routeName, ...routeParams]) {
let router = this.get('router');
return Ember.isEmpty(routeParams) ?
router.generate(routeName) : router.generate(routeName, routeParams[0]);
}
});
'container.lookup'は仕事をしてくれました。ありがとうございました。 – AcidBurn