【发布时间】:2014-05-12 12:36:21
【问题描述】:
0.8.0之前,以下代码可以完美运行。
<template name="carousel">
<!--Here I used the carousel of Bootstrap-->
<div id="myCarousel" class="carousel">
<ol class="carousel-indicators">
{{#each counter}}
<li data-target="#myCarousel" data-slide-to="{{this}}"></li>
{{/each}}
</ol>
<div class="carousel-inner">
{{#each carousels}}
<div class="item"><a href="{{link}}"><img src="{{src}}" ></a></div>
{{/each}}
</div>
<a class="carousel-control left" href="#myCarousel" data-slide="prev">‹</a>
<a class="carousel-control right" href="#myCarousel" data-slide="next">›</a>
</div>
</template>
Template.carousel.helpers({
carousels: function() {
return Carousels.find();
},
counter: function() {
return _.range(0, Carousels.find().count());
}
});
Template.carousel.rendered = function() {
Meteor.defer(function() {
$('#myCarousel .carousel-indicators li:first').addClass('active');
$('#myCarousel .item:first').addClass('active');
});
}
但更新到 0.8.0 后,添加 'active' 类不再起作用。 使用 Meteor.setTimeout 而不是 Meteor.defer,我终于发现它只有在延迟足够长(有时超过 150ms)时才有效。
Template.carousel.rendered = function() {
Meteor.setTimeout(function() {
$('#myCarousel .carousel-indicators li:first').addClass('active');
$('#myCarousel .item:first').addClass('active');
}, 150);
}
为什么会这样,有没有更好的解决办法?
[更新] 现在我使用一个简单的 isFirst 助手来实现它。我认为这是一个更好的解决方案。
{{#each carousels}}
<div class="item {{isFirst _id}}"><a href="{{link}}"><img src="{{src}}" ></a></div>
{{/each}}
Template.carousel.isFirst = function(id) {
return Carousels.find().fetch()[0]._id == id ? 'active' : '';
}
计数器,我只是让“计数器”从1开始,HTML如下:
<ol class="carousel-indicators">
<li class="active" data-target="#myCarousel" data-slide-to="0"></li>
{{#each counter}}
<li data-target="#myCarousel" data-slide-to="{{this}}"></li>
{{/each}}
</ol>
【问题讨论】:
-
听起来像是竞争条件。但在哪里,用什么,我不知道。
-
请查看我对一个非常相似的问题的回答here。您也可以遵循该模式。
标签: meteor