2016-04-01 6 views
3

ヘルパーから与えられたルートのURLを生成する必要があります。ヘルパーからRouter.generateを呼び出す

How to generate url for a route in Ember.js私は生成機能を使用するように指示しました。はい、私は必要とする(アプリケーションルートをグローバルにすることによって機能をチェックしました)うまくいきます。しかし、私はどのようにヘルパーの中からそれを呼び出すか分からない。

答えて

3

あなたは良い方向にあったので、主にこの問題を解決しました。 :) 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]); 
    } 
}); 

Demo on Ember Twiddle

+1

'container.lookup'は仕事をしてくれました。ありがとうございました。 – AcidBurn

関連する問題