我遇到了 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源代碼。
我已經設法通過使用確實客戶端觀察得到這個工作。我會盡快發佈一些代碼來演示如何完成這項工作 – matb33 2012-08-06 05:52:32
睡眠並重新獲得清晰的頭後,它讓我感到自動訂閱完全符合我的需求。現在看起來如此明顯...... – matb33 2012-08-08 13:24:12