簡體   English   中英

setInterval()數據庫檢查的替代方法-> Meteor.js

[英]Alternative for setInterval() database checking -> Meteor.js

這個想法很簡單,當記錄數更改或將新消息插入doc(相同的東西)時,我需要向下滾動消息饋送。

當前實現使用設置間隔來繼續檢查數據庫更改:

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次而沒有太大的目的。

那么,你們不用使用setInterval就能想到更好的CLEAN解決方案嗎?

您可以在onRendered回調中使用自動運行

Template.messenger.onRendered(function() {
  this.autorun(function() {
    if (Messages.find().count())
      Template.messenger.methods.scrollDown();
  });
});

由於計數是反應性的,因此autorun將在每次更改時觸發。 嘗試添加該內容並刪除onCreated scrollOnNewMessages及其引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM