2012-08-06 25 views
1

我遇到了 onReady回調的問題。當它被調用時,正如文檔所述:訂閱已被標記爲完成。但是,它正在修改的集合可能不會完成處理上次訂閱之間的差異。如何獲得訂閱onReady(以前onComplete)最新的收集

一個快速演示可以通過修改託多斯例子可以看出:

$ meteor create --example todos

編輯client/todos.js,見線34替換爲autosubscribe塊:

Meteor.autosubscribe(function() { 
    var list_id = Session.get('list_id'); 
    var onReady = function (done) { 
    var list, todos = Todos.find(); 
    if (todos) { 
     list = todos.map(function (todo) { 
     return todo.text; 
     }); 
     if (done) { 
     console.log("subscription onReady called again 100ms later:", list); 
     } else { 
     console.log("subscription onReady called:", list); 
     setTimeout(function() { 
      onReady(true); 
     }, 100); 
     } 
    } 
    }; 
    if (list_id) 
    Meteor.subscribe('todos', list_id, onReady); 
}); 

啓動的例子中,和在觀看控制檯時,從一個Todo List單擊到另一個(參見左上角)。您會注意到,調用onReady時,集合包含以前待辦事項列表中與新選擇的待辦事項列表串聯的文檔。

這是不是一個真正的錯誤,因爲onReady從未暗示,當收集上調,最新的,但只有當訂閱已經完成了它就會被解僱。

任何建議來解決這個問題?一旦收藏在訂閱後被更新到最新,是否有辦法立即得到通知?我想知道我是否應該依靠.observe ...但客戶端上?這是可用的客戶端?我明天可以試試這個...但我很樂意聽到解決方案

僅供參考:我的用例圍繞着typeahead Bootstrap JS plugin。我使用搜索查詢向服務器發起訂閱。服務器發佈搜索結果,一旦客戶端收到這些數據(希望onReady將是正確的選擇......),我將繼續填充/更新typeahead源代碼。

+0

我已經設法通過使用確實客戶端觀察得到這個工作。我會盡快發佈一些代碼來演示如何完成這項工作 – matb33 2012-08-06 05:52:32

+0

睡眠並重新獲得清晰的頭後,它讓我感到自動訂閱完全符合我的需求。現在看起來如此明顯...... – matb33 2012-08-08 13:24:12

回答