我有一個測試集合(「initData」),其中已經包含了一些文件和流星客戶端上下面的代碼:流星Deps.autorun沒有觸發 - 與觀察()相比它有什麼用處?
Meteor.subscribe("initData");
Meteor.startup(function() {
console.log(InitData.findOne("randIdTest").key);
Deps.autorun(function() {
var allInitData = InitData.find();
allInitData.forEach(function(entry) {
console.log("Deps foreach: " + entry._id);
});
var randomObject = InitData.findOne("randIdTest");
console.log("Deps call " + randomObject.key);
});
});
var InitDataObserver = InitData.find().observe({
added: initDataChange,
changed: initDataChange,
removed: initDataChange
});
function initDataChange() {
var allInitData = InitData.find();
allInitData.forEach(function(entry) {
console.log("Observer foreach: " + entry._id);
});
var randomObject = InitData.findOne("randIdTest");
console.log("Observer call " + randomObject.key);
}
我最初的目標是要找到儘快從收集使用數據的最佳方式因爲它在客戶端加載,因爲Meteor.startup被觸發時情況並非如此。 (在上面的第4行代碼中,我得到一個錯誤,因爲InitData.findOne(「randIdTest」)在那一刻未定義。)
我試圖用Deps.autorun()和observe()往上看。 observe()按照您的預期工作。然而,Deps.autorun()根本不會被觸發(不管我是否刪除,修改或添加文檔 - 我也試圖將它放在Meteor.startup(fucntion(){}))之外。
我是否理解Deps.autorun()錯誤或者我是否實現了錯誤?在這種情況下,我應該使用Deps.autorun()和when observe()嗎?
感謝您的所有輸入。這確實是由於未定義的randomObject,但它看起來像Deps.autorun也不會在調用之前發生錯誤時運行。所以我也必須檢查第4行的InitData.findOne(「randIdTest」).key和第11行的randomObject。現在Deps.autorun被觸發。 我現在檢查鐵路由器,然後堅持觀察()(因爲它看起來比Deps.autorun快一點)或使用鐵路由器。 –