我想和幾個附加字段的出版物中,但我不希望用Collection.aggregate
而失去我的發佈更新,當收集的變化(所以我不能只是在其中使用self.added
)。建立與其他字段反應出版物的每個文檔
我打算使用Cursor.observeChanges
,以實現這一目標。我有兩個主要的制約因素:
- 我不想公佈所有文件字段
- 我想用一些未公開的領域創造新的。例如,我有一個字段
item
其中I存儲item
_id的陣列。我不想發佈它,但我要發佈item_count
場我場陣列
這裏的長度來的辦法:
我打算找鏈查詢。我從來沒有這樣做,所以我想知道是否有可能。一般(簡體)查詢結構會是這樣的:http://jsfiddle.net/Billybobbonnet/1cgrqouj/(我不能讓這裏正常顯示的代碼)
基於the count example in Meteor documentation,我我的查詢存儲在一個變量
handle
爲了如果客戶停止變化的通知退訂:self.onStop(function() { handle.stop(); });
我我的查詢前加一個標誌
initializing = true;
,我只是打電話self.ready();
之前設置爲true
。我用這個標誌來改變,只有當它是被初始化發佈我itemCount
變量。所以基本上,我改變我的switch
這樣的:switch (field) { case "item" if (!initializing) itemCount = raw_document.item.length; break; default: }
我想檢查,這種做法是犯到我的代碼中大的變化之前和好可能。有人可以證實我是否應該走這條路嗎?
先生,我摘下我的帽子。這是一個很好的答案,你的方法就像一個魅力。我有10個自定義字段(不僅是計數),還有16個白名單。你認爲每次觸發'self.changed'都是明智的(性能方面),即使它不會有效地改變客戶端的輸出嗎?還是應該在'self.changed'之前檢查我的10個屬性? – Billybobbonnet
順便說一句,關於'observeChanges',我只是希望它返回同一個擴展了函數的遊標來觀察它。我嘗試了幾個設置,但作爲一個初學者,我覺得這是我的聯盟,想出一個像你這樣的解決方案。 – Billybobbonnet
很好用! 「你認爲每次觸發self.changed都是明智的(性能方面),即使它不會有效地改變客戶端的輸出嗎?」 我認爲一個合理的方法是儘可能保持簡單。如果後來成爲性能問題,那麼您在那個時候處理它。我們在我們的製作流星站點使用了很多,我們還沒有遇到任何重大問題。 順便說一句,如果'item.length'發生變化,這將只會更新文檔。如果你想更新你的其他16個字段,你應該在'changed'回調中刪除'item.length'' if,因此你總是調用'self.changed'。 – datacarl