提问人:vini 提问时间:7/30/2015 最后编辑:gfullamvini 更新时间:12/21/2015 访问量:1142
Handlebars:当有两行项目时获取项目的索引
Handlebars: Get index of an item when there are two rows of items
问:
即使在第二行,下面也总是给出。请帮忙。@key
0 1 2 3
车把模板:
{{#grouped_each 4 orderData}}
<div class="row">
{{#each this }}
<div class="col-md-3">
<div class="thumbnail">
<img src="{{getImageSourceChannel ../../channelNames @key name}}" class="">
<div class="caption">
<p><b>{{getObjectAtIndex ../../channelNames @key}}</b></p>
<p class="">{{slices.4.count}} new orders</p>
<p class="">{{slices.3.count}} back orders</p>
</div>
</div>
</div>
{{/each}}
</div>
{{/grouped_each}}
车把部分:
Handlebars.registerHelper('grouped_each', function(every, context, options) {
var out = "", subcontext = [], i;
console.log(every);
console.log(context);
console.log(options);
if (context && context.length > 0) {
for (i = 0; i < context.length; i++) {
if (i > 0 && i % every === 0) {
out += options.fn(subcontext);
subcontext = [];
}
subcontext.push(context[i]);
}
out += options.fn(subcontext);
}
return out;
});
答:
0赞
gfullam
12/19/2015
#1
使用在部分内具有声明键的对象
在部分定义中,不要盲目地将项目推送到键/索引每四次迭代重置一次的数组中,而是使用一个对象,您可以在多个迭代中按顺序声明其键。
Handlebars.registerHelper('grouped_each', function(every, context, options) {
var out = '',
subcontext = {}, // Declare an object, instead of an array
i;
if (context && context.length > 0) {
for (i = 0; i < context.length; i++) {
if (i > 0 && i % every === 0) {
out += options.fn(subcontext);
subcontext = {};
}
// Declare keys on your object,
// instead of blindly pushing into an empty array
subcontext[i] = context[i];
}
out += options.fn(subcontext);
}
return out;
});
var template = Handlebars.compile($("#template").html());
$("#rendered").html(template(
{
"orderData": [
{ "name": "Order 1" },
{ "name": "Order 2" },
{ "name": "Order 3" },
{ "name": "Order 4" },
{ "name": "Order 5" },
{ "name": "Order 6" },
{ "name": "Order 7" },
{ "name": "Order 8" },
]
}
));
#rendered {
display: table;
}
.row {
display: table-row;
}
.row > div {
display: table-cell;
padding: 0.5em;
border: 1px solid white;
background-color: silver;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.5/handlebars.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<script id="template" type="text/x-handlebars-template">
{{#grouped_each 4 orderData}}
<div class="row">
{{#each this }}
<div class="col-md-3">
<div class="thumbnail">
<div class="caption">
<p><b>Key {{@key}}:</b> {{name}}</p>
</div>
</div>
</div>
{{/each}}
</div>
{{/grouped_each}}
</script>
<div id="rendered"></div>
0赞
vini
12/21/2015
#2
这就是我通过 css 而不是 handlebars 实现它的方式
.row [class*="col-md-4"]:nth-of-type(3n+1) {
clear:left;
}
.row [class*="col-md-4"]:nth-of-type(n+3) {
margin-bottom: 10px;
}
评论