ember.js - 从另一个助手调用 Handlebars block 助手

标签 ember.js helper handlebars.js

如何在 ember 中从另一个助手调用 Handlebars block 助手。

我有兴趣在绑定(bind)助手中转换以下内容。

    {{#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}} block ,并使用属性 link.linkToRoute 中的值更改 ROUTE_VARIABLE。

最佳答案

Ember Handlebars 助手位于 Ember.Handlebars.helpers .您可以调用Ember.Handlebars.helpers.{helperName}.call 联系他们.

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

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

通过给出 templateName,相应的 View 可以使用类似于您的模板。
  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>

默认 Ember linkTo是静态的,因为您不能从变量传递命名路由。您将需要一个动态的 linkTolinkFor 这样的助手之前查找变量路径
申请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属性将绑定(bind)到 content本例中的 Controller 。
 <script type='text/x-handlebars' data-template-name='application'>
   {{sideMenuLinks links=content routeVariable='page'}}
 </script>

这是一个有效的jsbin .

关于ember.js - 从另一个助手调用 Handlebars block 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17532878/

相关文章:

javascript - Handlebars 无法正确渲染模型中的内容

css - 在 Ember 中动态更改 CSS 类

json - 如何在 ember 中序列化简单数组有效负载?

php - Laravel 5 - 在哪里定义函数并在 View 和 Controller 中调用它们

handlebars.js - 在 Rails Asset Pipeline 中使用带有 Marionette 的外部 Handlebars 模板

javascript - 页面加载后呈现部分 Handlebars (HBS)

javascript - 客户端 MV* - 模型应该有保存方法吗?

javascript - 如何为 ember.js 创建自定义适配器?

jquery - es6 模块,只有几行代码。我应该导出什么?

javascript - jQuery FancyBox 2.0 : helpers issues (buttons and thumbs)