我试图将第一张图片设置为“活动项目”,我是一个Bootstrap Carousel。那么,有没有办法让集合中的第一个元素与其他元素不同?
{{#each pictures}}
{{#if @first}}
<div class="item active">
<img src="/pictures/{{fileName}}" alt="" />
</div>
{{else}}
<div class="item">
<img src="/pictures/{{fileName}}" alt="" />
</div>
{{/if}}
{{/each}}
呈现的页面仅显示{{else}}语句中的内容。 尝试过使用{{if @first}},但它对我不起作用。
答案 0 :(得分:8)
这与needing an index in your template的问题非常相似。您需要映射pictures
并标记您需要区别对待的那个。例如:
Template.myPictures.helpers({
pictures: function() {
return Pictures.find().map(function(picture, index) {
if (index === 0)
picture.isFirst = true;
return picture;
});
}
});
然后,您可以在模板中使用isFirst
,如下所示:
{{#each pictures}}
{{#if isFirst}}
<div class="item active">
<img src="/pictures/{{fileName}}" alt="" />
</div>
{{else}}
<div class="item">
<img src="/pictures/{{fileName}}" alt="" />
</div>
{{/if}}
{{/each}}
请注意,CoffeeScript的@
在模板中不起作用。要了解有关模板上下文的更多信息,请参阅this。
答案 1 :(得分:2)
这不完全是您要求的,但您可以在active
回调中使用jQuery创建第一个项目rendered
。
Template.myPictures.rendered = function () {
this.$('.item').first().addClass('active');
};