实现自定义ember每个手柄助手

时间:2014-06-01 18:52:32

标签: ember.js handlebars.js

我正在尝试为以下情况实施帮助:

{{#inRange collection 1 3}}
    {{view App.SomeView content=this}}
{{/inRange}}

这个助手的目的是在一些集合中只渲染几个项目 - >这由第二和第三个参数指定 - >开始和结束。

到目前为止,我正在尝试这样的事情:

Ember.Handlebars.registerHelper('inRange', function (collection, start, end, options) {
  var res = '';
  var data = Ember.Handlebars.get(this, collection);
  data = data.slice(start, end);

  data.forEach(function (item) {
    res += options.fn(item);
  });

  return res;
});

但是如果我需要在块帮助器中渲染view,这不起作用。我查看了native Ember each实现,但他们正在以其他方式进行此操作。 他们使用这样的东西:

options.hash.dataSourceBinding = path;
return Ember.Handlebars.helpers.collection.call(this, 'Ember.Handlebars.EachView', options);

问题是因为我找不到任何关于这些代码行的文档。

有谁知道如何制作自定义each帮助器,或者知道Ember each如何在内部工作?

1 个答案:

答案 0 :(得分:1)

我想学习同样的东西。 但是在您的情况下,而不是创建自己的车把,最好将子集合创建为属性并将其传递给each助手。

在View类

subCollection: function(){
   var collection = this.get('collection');
   return collection.slice(1,3);
}.property()
车把

{{#each subCollection}}
    {{view App.SomeView content=this}}
{{/each}}