【问题标题】:Implementing custom ember each handlebar helper实现自定义 ember 每个车把助手
【发布时间】:2014-06-01 18:52:32
【问题描述】:

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

{{#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 在内部如何工作?

【问题讨论】:

    标签: ember.js handlebars.js


    【解决方案1】:

    我也想学。 但在您的情况下,与其创建自己的车把,不如创建一个子集合作为属性并将其传递给each helper。

    在视图类中

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

    在车把中

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

    【讨论】:

    • 嗯。我知道这种解决方法,但我不喜欢它,因为在这种情况下,如果您可以提到助手,则“视图类”中的代码是完全没有必要的,并且如果您想创建多个“subCollection-s”,则视图中的代码/控制器将开始变脏。
    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    相关资源
    最近更新 更多