车把每个都有数量

时间:2013-06-19 14:50:29

标签: javascript handlebars.js

我无法弄清楚车把的情况。 我的数据如下:

items : [
  {
    name : "foo"
  },
  {
    name : "bar"
  },
  {
    name : "bacon"
  },
  {
    name : "burger"
  }
]

在我的模板中,我想创建大小为3的列表,因此最终的html应如下所示:

<ul>
    <li>foo</li>
    <li>bar</li>
    <li>bacon</li>
</ul>
<ul>
    <li>burger</li>
</ul>

现在我在Handlebars模板中有这个:

<ul>
{{#each items}}
 <li>{{name}}<li>
{{/each}}
</ul>

所以我最终得到了这个:

<ul>
<li>foo</li>
<li>bar</li>
<li>bacon</li>
<li>burger</li>
</ul>

我是否需要创建助手?我该如何创建它?类似于扩展默认的#each助手并在每次X迭代时添加额外的dom元素(例如0,3,6,9 ...)

谢谢

3 个答案:

答案 0 :(得分:1)

您需要创建自定义帮助程序:

Handlebars.registerHelper("separateList", function( arr, options ) {
  // Here we only apply one line, but implement your separation logic in here
  return options.fn( arr[0] ); // pass a single arr item here
});

然后在你的模板中:

{{#separateList arr}}
  <li>{{content}}</li>
{{/separateList}}

这是基本的实现,但你可以随心所欲:

答案 1 :(得分:1)

感谢您的回答,我更愿意将逻辑处理为Handlebar Helper。我设法做到了,这是代码:

Handlebars.registerHelper('list', function(context, options) {

var ret = "",
  listLength = 3,
  u = 0;

for(var i=0, j=context.length; i<j; i++) {

if( i % listLength === 0  ) {
    u = 0;
    ret += '<ul>';
}

ret +=  options.fn(context[i]);

if( u === listLength - 1 ) { // Zero indexed
    ret +='</ul>';
}

u++;
}

return ret;
});

模板:

{{#list items}}
     <li>{{name}}</li>
  {{/list}}

答案 2 :(得分:0)

将items数组分成包含三个对象的子数组,我们称之为itemsThree。喜欢这个:

itemsThree = [
    [
        {
            name : "foo"
        },
        {
            name : "bar"
        },
        {
            name : "bacon"
        } 
    ], 
    [
        {
            name: "burger"
        }
    ]
];

(显然不要手动创建。)

然后遍历它自己的<ul>中的每个子数组,并遍历每个子数组并将对象放在<li>中。

有道理吗?