0
這個想法非常簡單當記錄數量發生變化或新消息插入到doc(同一事物)時,我需要做向下滾動的消息饋送。setInterval()數據庫檢查的替代方法 - > Meteor.js
當前實現使用設定的時間間隔,以保持檢查數據庫的變化:
Template['messenger'].onCreated(function(){
$(function(){
Template['messenger'].methods.scrollOnNewMessages().start();
})
});
Template['messenger'].methods = {
scrollOnNewMessages : function() {
return {
oldCount : 0,
start : function() {
this.oldCount = Messages.find().count();
setInterval(this.funcToRepeat, 400);
},
funcToRepeat : function() {
var newCount = Messages.find().count();
var updated = this.oldCount !== newCount;
if(updated){
this.oldCount = newCount;
Template['messenger'].methods.scrollDown();
}
}
}
},
scrollDown: function() {
var height = $(".messageEntry").outerHeight() + 3;
var scrollLength = $('.messageEntry').length * height - $("#messageFeed").height();
$('#messageFeed').animate({scrollTop:scrollLength}, 400, 'swing');
},
}
這工作得很好,但我討厭使用的setInterval的想法()。 嘗試使用Template.my_template.onRendered執行此操作,但是這將在每個已呈現的模板上執行一個函數,這意味着如果我在啓動時顯示了50條消息,它將自動滾動50次而沒有太多目的。
所以你們可以想到一個更好的CLEAN解決方案,而不使用setInterval?
你爲什麼使用onRendered而不是onCreated? P.S.很好的答案。謝謝 ! –
我認爲'onRendered'在這裏更有意義,因爲我們正在處理DOM元素。如果你使用'onCreated',那麼可以在模板被渲染之前調用'scrollDown'。 –