2013-07-08 8 views
7

他のヘルパーからハンドルバーブロックヘルパーを呼び出す方法を教えてください。他のヘルパーからハンドルバーブロックヘルパーを呼び出す

私はバインドヘルパーで以下を変換することに興味があります。

{{#each link in sideMenuLinks}} 
     <li class="navigation page"> 
      {{#linkTo ROUTE_VARIABLE link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkTo}} 
     </li> 
    {{/each}} 

Iヘルパー内部{{#linkTo}}ブロックを呼び出してもプロパティlink.linkToRouteから値でROUTE_VARIABLEを変更する必要があります注意してください。

答えて

2

Emberのハンドルバーヘルパーは、Ember.Handlebars.helpersに配置されています。 Ember.Handlebars.helpers.{helperName}.callでそれらを呼び出すことができます。

ただし、上記は動的な部分/ビュースタイルのヘルパーのようです。私はハンドルバーヘルパーを作成することをお勧めします。構文は似ていますが、Viewクラスをhelperに渡します。対応するビューのようなものだろうtemplateName

App.SideMenuLinksView = Ember.View.extend({ 
    templateName: 'sideMenuLinksTemplate' 
    }); 

あなたのテンプレートを与えることによって、あなたに似たテンプレートを使用することができます

Ember.Handlebars.helper('sideMenuLinks', App.SideMenuLinksView); 

<script type='text/x-handlebars' data-template-name='sideMenuLinksTemplate'> 
    {{#each link in view.links}} 
     <li class="navigation page"> 
      {{#linkFor parentView.routeVariable link.linkToRouteContext}} 
       {{{link.iconTag}}}<i class="icon-right-open"></i>{{link.linkText}}</a> 
      {{/linkFor}} 
     </li> 
    {{/each}}  
</script> 

デフォルトエンバーlinkToはでは、静的です変数から名前付きルートを渡すことはできません。 linkToを内部的に適用する前に、変数パスを検索するlinkForのような動的なlinkToヘルパーが必要です。

Ember.Handlebars.registerHelper('linkFor', function(path, params, options) { 
    var view = options.data.view; 
    var name = view.get(path); 
    var args = [name, params, options]; 

    return Ember.Handlebars.helpers.linkTo.apply(this, args); 
    }); 

最後に、このヘルパーを以下のように使用できます。 linksプロパティは、この例のコントローラーのcontentにバインドされます。

<script type='text/x-handlebars' data-template-name='application'> 
    {{sideMenuLinks links=content routeVariable='page'}} 
</script> 

ここには、作業中のjsbinがあります。

+1

明らかに、これはもううまくいかず、ember-cliを使用して成功しようとしました。 –

+0

成功しましたか?私は同じ問題に遭遇した。 – julkiewicz

関連する問題