簡體   English   中英

如何在流星中加載頁面后調用函數

[英]How to call function after page load in meteor

我使用cursor.observechanges來查看mongo中是否插入了新記錄,並在新的recored插入時發出通知並且工作正常。但這里的問題是我的應用程序第一次加載時,我收到了那些通知警報,因為它觀察了那些變化。點擊下一頁的方式。

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

所以我需要在頁面加載后調用此函數。我嘗試使用

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

但它在我的情況下沒有用。我還有其他方法可以做到這一點。或者如果可能的話,我們如何設置5秒的時間並在該時間間隔后調用上述功能? 任何幫助將不勝感激。謝謝!

根據文檔 Template#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)
});

行為是正確的,因為對於模板,確實添加了那些記錄。 瀏覽並瀏覽,重新創建模板,現在所有這些相同的記錄再次成為模板的新記錄。

您需要將新記錄的概念與模板分開,並將記錄作為應用程序的新記錄。

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

  1. 編寫一個提供服務器當前時間的Meteor方法
  2. 在模板的onCreated()中,調用該方法並保存結果
  3. 在添加的:處理程序中,將添加項的創建時間戳與保存時間的創建時間戳進行比較
  4. 如果添加的項目較舊,則不執行任何操作
  5. 如果添加的項目較新,請采取您的行動

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

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

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

暫無
暫無

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

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