如何使用空格键获取第一个集合元素{{#if}}标记?

时间:2014-08-13 17:29:11

标签: meteor spacebars

我试图将第一张图片设置为“活动项目”,我是一个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}},但它对我不起作用。

2 个答案:

答案 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');
};