7

Ember で別のヘルパーからハンドルバー ブロック ヘルパーを呼び出すにはどうすればよいですか。

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

    {{#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}}

ヘルパー内で {{#linkTo}} ブロックを呼び出し、プロパティ link.linkToRoute の値で ROUTE_VARIABLE を変更する必要があることに注意してください。

4

1 に答える 1

2

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

ただし、上記は動的部分/ビュー スタイル ヘルパーのように見えます。そのための Handlebars View ヘルパーを作成することをお勧めします。構文は似ていますが、View クラスを に渡しますhelper

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

対応するビューは、あなたのものに似たテンプレートを使用できます。templateName

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

テンプレートは次のようになります。

 <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>

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

  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です。

于 2013-07-09T04:47:54.860 に答える