Ember.js 在自定义把手辅助对象中使用链接到

Ember.js 在自定义把手辅助对象中使用链接到,ember.js,handlebars.js,Ember.js,Handlebars.js,我正在使用Handlebar助手解析一组对象,我希望返回的结果被包装在一个#linkTo调用中,以便Embers路由器将其提取 以下是我在视图中如何称呼它: {{buildBreadcrumb my_objects}} 以下是我的助手的样子: Ember.Handlebars.registerHelper 'buildBreadcrumb', (val, opts) -> value = Ember.get(this, val) out = "" value.forEach (

我正在使用Handlebar助手解析一组对象,我希望返回的结果被包装在一个#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}}等。。。在视图本身中-但是由于我的用例,我必须使用一个助手来构建它。有什么建议吗?

您可以编写一个自定义的车把视图帮助程序。该视图可以封装
#每个
逻辑,而最后一个助手看起来与这里的基本相似。使用上的唯一区别是必须将参数作为属性传递给视图帮助器

创建此帮助器的方法是传入视图类而不是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> 

    {{#视图中的每个项目。项目}
  • {{{#链接到'group'项目}{{item.id}{{{/linkTo}}»;
  • {{/每个}}
以及使用应用程序中的帮助程序

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

  • {{{#链接到'group'view.penutimate}{{view.penutimate.id}{{/linkTo}}»
  • {{{#linkTo'group'view.last}{{view.last.id}{{/linkTo}}
这种方法的一个好处是绑定是自动连接的,因此更改items数据将自动更新breadcrumb视图,从而保留内部变形


举个例子。

多亏了你的努力,我对你的答案投了赞成票——我很感激。然而,我最大的问题不是遍历项目并使它们成为链接(正如您演示的那样,我可以通过一个简单的#每次调用来做到这一点)。我的问题是,我只想显示数组中的最后两项并链接到它们——我不想看到完整的面包屑痕迹(如果有意义的话)。这就是我在上面给出的示例代码中检查项目索引的原因。对于您给出的示例,有什么方法可以做到这一点吗?当然,您可以使用指向特定索引项的计算属性,然后在模板中使用这些属性。请参阅更新的代码。