流星和 Bootstrap 旋转木马

Meteor and Bootstrap Carousel

我正在使用 Meteor 开发一个博客项目,我在前端使用 Bootstrap 4。我现在想要显示一个博客页面,其中 Bootstrap 轮播循环显示最近的 3 个 post。

Bootstrap 要求第一个 post 从一开始就有一个 class 的 active。使用我的 Meteor 助手,我似乎无法使这段代码正常工作。

这是我的旋转木马html:

<template name="blog">
  <div class="carousel slide" data-ride="carousel" id="blog-carousel">
    <ol class="carousel-indicators">
      <li class="active" data-slide-to="0" data-target="#carousel-example-generic"></li>
      <li data-slide-to="1" data-target="#carousel-example-generic"></li>
      <li data-slide-to="2" data-target="#carousel-example-generic"></li>
    </ol>
    {{> carouselList}}
    <a class="left carousel-control" data-slide="prev" href="#blog-carousel" role="button">
      <span aria-hidden="true" class="icon-prev"></span>
      <span class="sr-only">Previous</span>
    </a>
    <a class="right carousel-control" data-slide="next" href="#blog-carousel" role="button">
      <span aria-hidden="true" class="icon-next"></span>
      <span class="sr-only">Next</span>
    </a>
  </div>
</template>

这是我的列表循环以及单个轮播项目:

<template name="carouselList">
  <div class="carousel-inner" role="listbox">
    {{#each carouselItems}}
      {{> carouselItem}}
    {{/each}}
  </div>
</template>

<template name="carouselItem">
  <div class="carousel-item">
    <img alt="{{title}}" src="{{imageUrl}}">
  </div>
</template>

这些是我的列表助手:

Template.carouselList.helpers({
     carouselItems: function(){
       return Posts.find({}, {sort: {timeCreated: -1}})

     }
});

Template.carouselItem.rendered = function () {
  this.$('.carousel-item').first().addClass('active');
};

我正在尝试使用 jQuery 为项目添加活动 class。但是,这会将活动 class 添加到所有这些。

我仍然是 Meteor 的初学者,所以如果能给我正确方向的提示,我将不胜感激!

如果您使用最新的 meteor 版本,您需要在模板呈现之前将其设置为活动状态,我们可以使用 @index 检查 {{#each}} 索引,如果它是第一个循环,则将其设置为活动状态这是一个演示,也许有更好的方法,但这应该可以正常工作。

<template name="carouselList">
  <div class="carousel-inner" role="listbox">
    {{#each carouselItems}}
      {{> carouselItem title=title imageUrl=imageUrl index=@index}}
    {{/each}}
  </div>
</template>

<template name="carouselItem">
  <div class="carousel-item {{isActive}}">
    <img alt="{{title}}" src="{{imageUrl}}">
  </div>
</template>

Template.caruselItem.helpers({
  isActive: function () {
    return (this.index === 0) ? 'Active': '';
  }
});

p.s 如果 bootstrap 需要在渲染之前激活,如果他们使用它,上面的方法将起作用,如果它只是 CSS 你可以改变你的代码来制作只需将 this.$('.carousel-item').first().addClass('active'); 移动到 carouselList onRendered 即可。因为现在你基本上都做了3次。