2012-12-19 66 views
3

考慮以下代碼:Meteor.publish不更新客戶端時的數組用於查詢

Meteor.publish("Children", function (id) { 
    // Find all the items that are children of an item that I am sharing 
    // 
    var sharing = Items.find({$and : [{_id:id},{sharing:{$elemMatch: {user_id:this.userId}}}]}).fetch(); 
    var shared_children = []; 
    sharing.forEach(function(share){ 
    share.children.forEach(function(child){ 
     shared_children.push(child.id); 
    }); 
    }); 
    return Items.find({_id:{$in : shared_children}}); 
}); 

在我Meteor.publish,我動態生成的ID的數組在我的.find使用。它適用於手動查詢數據,但是當我向「共享」字段添加新元素時,只有添加了該字段的客戶端纔會顯示更新。其他正在查看相同元素的客戶端不會獲得從服務器發送的更新值。他們只需更新已有的minimongo數據庫中的任何內容即可。服務器端MongoDB確實顯示新條目,但我無法在除創建它之外的任何客戶端上查詢它。

問題是我的.find正在使用計算值數組,因此依賴關係系統沒有再次調用我的發佈事件?

回答

0

流星的反應性運行在服務器端是一個常見的誤解。相反,典型的模式是某些東西會將客戶端更改爲具有反應變量(例如Session對象)作爲訂閱的參數。訂閱價值的變化將導致發佈被新參數重新調用。

相反,如果你想做這個服務器端,你需要設置一個觀察者,如counts-by-room example