从另一个助手调用把手阻止助手

use*_*079 7 helper handlebars.js ember.js

如何从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}}
Run Code Online (Sandbox Code Playgroud)

请注意,我必须在帮助程序中调用{{#linkTo}}块,并使用属性link.linkToRoute中的值更改ROUTE_VARIABLE.

Dar*_*kar 2

Ember 车把助手放置在Ember.Handlebars.helpers。您可以使用 来呼叫他们Ember.Handlebars.helpers.{helperName}.call

然而,上面看起来像一个动态的部分/视图样式助手。我建议为其创建一个 Handlebars View 助手。语法类似,但您将 View 类传递给helper.

  Ember.Handlebars.helper('sideMenuLinks', App.SideMenuLinksView);
Run Code Online (Sandbox Code Playgroud)

相应的视图可以使用与您的模板类似的模板,方法是给出templateName

  App.SideMenuLinksView = Ember.View.extend({
    templateName: 'sideMenuLinksTemplate'
  });
Run Code Online (Sandbox Code Playgroud)

你的模板会是这样的,

 <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>
Run Code Online (Sandbox Code Playgroud)

默认的 EmberlinkTo是静态的,因为你不能从变量传递命名路由。您将需要一个动态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);
  });
Run Code Online (Sandbox Code Playgroud)

最后你可以像下面一样使用这个助手。在此示例中,该links属性将绑定到content控制器的 。

 <script type='text/x-handlebars' data-template-name='application'>
   {{sideMenuLinks links=content routeVariable='page'}}
 </script>
Run Code Online (Sandbox Code Playgroud)

这是一个正在运行的jsbin