【问题标题】:Using linkTo within a custom Handlebars helper在自定义 Handlebars 助手中使用 linkTo
【发布时间】:2013-06-27 12:57:53
【问题描述】:

我正在使用 Handlebars 帮助器来解析一组对象,我希望将返回的结果包装在 #linkTo 调用中,以便 Embers 路由器接收它。

这是我在视图中的调用方式: {{buildBreadcrumb my_objects}}

这是我的助手的样子:

Ember.Handlebars.registerHelper 'buildBreadcrumb', (val, opts) ->
  value = Ember.get(this, val)
  out = ""
  value.forEach (group, index) =>
    if value.length - index == 2
      out += '{{#linkTo group ' + group.name + '}}'
    if value.length - index == 1
      out += '{{#linkTo group ' + group.name + '}}'
  out

出于显而易见的原因,上面只是将{{#linkTo ...}} 解析为文字字符串。有什么方法可以让我按照我想要的方式解析它?我很清楚我可以在视图本身中使用 {{#each}} 等......但由于我的用例,我不得不使用帮助器来构建它。有什么建议吗?

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    您可以编写自定义 Handlebars 视图助手。该视图可以封装#each 逻辑,而最终的助手看起来与您在此处所拥有的大部分相似。使用上的唯一区别是必须将参数作为属性传递给 View 帮助器。

    创建这个helper的方法是传入View类而不是helper函数。

    App.BreadcrumbView = Ember.View.extend({
      templateName: 'breadcrumb',
      penultimate: function() {
        var length = this.get('items').length;
        return this.get('items')[length - 2];
      }.property('items'),
      last: function() {
        var length = this.get('items').length;
        return this.get('items')[length - 1];
      }.property('items')
    });
    
    Ember.Handlebars.helper('breadcrumb', App.BreadcrumbView);
    

    以及对应的模板,

    <script type='text/x-handlebars' data-template-name='breadcrumb'>
      <ul class="breadcrumb">
        {{#each item in view.items}}
          <li>{{#linkTo 'group' item}}{{item.id}}{{/linkTo}} &raquo;
          </li>
        {{/each}}
      </ul>    
    </script> 
    

    并且要在应用程序中使用助手,

    <script type='text/x-handlebars' data-template-name='breadcrumb'>
      <ul class="breadcrumb">
        <li>{{#linkTo 'group' view.penultimate}}{{view.penultimate.id}}{{/linkTo}} &raquo;</li>
        <li>{{#linkTo 'group' view.last}}{{view.last.id}}{{/linkTo}}</li>
      </ul>    
    </script>  
    

    这种方法的一个好处是绑定是自动连接的,因此更改项目数据将自动更新面包屑视图,保留内部变形。

    这是一个jsbin 示例。

    【讨论】:

    • 感谢您付出的努力,我赞成您的回答 - 我很感激。然而,我最大的问题不是遍历这些项目并使它们成为链接(正如您所展示的,我可以通过一个简单的 #each 调用来做到这一点)。我的问题是我只想显示数组中的最后两个项目并链接到这些项目 - 我不想要完整的面包屑路径(如果这有意义的话)。这就是我在上面给出的示例代码中检查项目索引的原因。用你给出的例子有什么办法吗?
    • 当然,您可以使用指向特定索引项的计算属性,然后在模板中使用这些属性。查看更新的代码。
    猜你喜欢
    • 2016-06-09
    • 1970-01-01
    • 2014-09-17
    • 2016-12-04
    • 2023-03-30
    • 2018-05-14
    • 1970-01-01
    • 2013-08-03
    • 1970-01-01
    相关资源
    最近更新 更多