2017-02-28 63 views
1

Iam使用cursor.observechanges查看是否有任何新記錄插入到mongo中,並給出通知,因爲新插入的記錄和它工作正常。但問題在於當我的應用程序第一次加載時,Iam從觀察到這些更改後收到這些通知警報。單擊下一頁時的名稱。如何在頁面加載流星後調用函數

cursor.observeChanges({ 
    added: function(id, object) { 
    Notification.error('NEW Record',object); 
    var audio = new Audio('audio.mp3'); 
    audio.play(); 
    } 
}); 

所以我需要調用的頁面獲取loaded.I只有在此之後機能的研究使用

Template.foo.onRendered(function() { 
    cursor.observeChanges({ 
    added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
    } 
    }); 
}); 

嘗試,但它並沒有在我的case.Is在那裏工作,我們可以做this.Or任何其他方式否則,如果可能的話,我們可以如何設置5秒的時間並在該時間間隔之後調用上述功能? 任何幫助將不勝感激。謝謝!

回答

0

根據docsTemplate#onRendered

註冊一個功能時,這個模板的實例插入到DOM被調用。

嘗試來包裝你的代碼Meteor.defer

Template.foo.onRendered(function() { 
    Meteor.defer(function() { 
    cursor.observeChanges({ 
     added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
     } 
    }); 
    }) 
}); 

如果它不會幫助,儘量把它包在Meteor.setTimeout

Template.foo.onRendered(function() { 
    Meteor.setTimeout(function() { 
    cursor.observeChanges({ 
     added: function(id, object) { 
     Notification.error('NEW Record',object); 
     var audio = new Audio('audio.mp3'); 
     audio.play(); 
     } 
    }); 
    }, 5000) 
}); 
+0

我不同意。我不會嘗試用計時器來解決這個問題。問題在於新記錄與新出現的記錄之間缺乏區別。 – zim

0

的行爲是正確的,因爲,到模板,那些記錄的確加入了。瀏覽並瀏覽,重新創建模板,現在所有相同的記錄再次成爲模板的新增內容。

您需要將新記錄的概念與新模板以及新記錄分開。

我可以用時間戳來解決這個問題。例如

  1. 寫一個流星方法提供了模板的onCreated(服務器
  2. 的當前時間),調用該方法,並保存斷結果
  3. 在增加:處理器,比較的創建時間戳記增加的項目到已保存的時間
  4. 如果添加的項目是年紀大了,什麼也不做
  5. 如果添加的項目是新的,把你的行動

這意味着你的收藏將需要一個createdAt字段。

此解決方案應該可用於重新加載應用程序,瀏覽/從模板中瀏覽以及長時間運行的模板。

爲了獲得最佳效果,在Meteor方法調用返回服務器時間之前不要開始您的訂閱。所有這些都應該發生在onCreated()。

相關問題