之前0.8.0,下面的代碼完美的作品。流星0.8.0 - 無法在呈現回調操作DOM
<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,我終於發現,它只能當延遲是足夠長的時間(150毫秒有時更長)。
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>
聽起來像是一種競爭條件。但是,我不知道,在哪裏,以及在哪裏。 – Homer6
請結帳我的回答對一個非常類似的問題[這裏](http://stackoverflow.com/questions/22789821/meteor-0-8-blaze-how-to-update-rendered-changes-for-jquery-plugins) 。你也可以遵循這種模式。 –