提问者:小点点

使用Ember的句柄#块助手中的每个助手,将数组切成块


我正在尝试将ArrayController内容切成块(出于表示目的)。在每个块中,我想遍历项目以正确呈现所有内容。

我尝试通过编写分区Handlebar块助手来实现这一点,这似乎可以工作。但是,当我尝试循环遍历每个块的内容时,each抛出以下错误:“断言失败:#each循环遍历的值必须是一个数组。您传递了[object Object]”

helperss. js

Ember.Handlebars.registerHelper('partition', function(path, options){
  path = path === '' ? 'this' : path;
  var arr = [];
  var data = Ember.Handlebars.get(this, path, options).content;
  var ret = '';
  while(data.length){
    arr.push(data.splice(0, options.hash.size || 2));
  }
  for(var i = 0, len = arr.length; i < len; i++){
    ret = ret + options.fn(arr[i]);
  };
  return ret;
});

hbs模板

<h2>Your photos</h2>
{{#partition controller.photos size=2}}
  <div class="slide">
    {{#each this}}
      {{this.title}}
    {{/each}}
  </div>
  <br/><br/><br/>
{{/partition}}

#分区中的this是大小正确的数组。

我如何才能让它工作?each从哪里获取其内容?

要点可以在这里找到:https://gist.github.com/frekw/2d3627039b42891a0b0a


共1个答案

匿名用户

我解决了您的问题,请参阅此JSBin进行演示。

>

  • 在帮助程序中,我创建了一个新的Ember. Object,其中包含分区集合。该对象作为上下文传递给options.fn()

    我在块中添加了一个带有助手的来为每个块设置上下文。

    {{#partition photos size=2}}
      <div class="slide">
        {{#with collection}}
          {{#each}}
            {{title}}
          {{/each}}
        {{/with}}
      </div>
      <br/><br/><br/>
    {{/partition}}
    

    帮手:

    Ember.Handlebars.registerBoundHelper("partition", function(collection, options){
    
      var size = options.hash.size || 2;
    
      while(collection.length > 0)
      {
        var oc = Ember.Object.create({
          collection: collection.splice(0, size)
        });
        options.fn(oc);
      }
    
    });
    

    我希望这能有所帮助。