我不確定這是否是對React和Meteors連接的限制,因爲文檔建議它應該可能沒有額外的參數。反應和流星訂閱
當我在響應中調用流星訂閱時,如果我沒有在查詢中明確聲明參數,它將返回任何數據,忽略publish函數中的指定數據。
Meteor.publish("supplier", function() {
if(this.userId) {
var user = Meteor.users.findOne(this.userId, { fields : { active : 1 }});
if(user.active != this.userId || user.active != undefined){
// This only returns 1 singular supplier - is correct
var supplier = Supplier.find({ _id : user.active, users : this.userId });
return supplier;
} else {
return this.ready();
}
} else {
return this.ready();
}
});
現在我所說的認購反應,如使
getMeteorData: function() {
var data = {}
handle = Meteor.subscribe("supplier");
if(handle.ready()) {
data.supplier = Supplier.findOne(); // Returns Wrong supplier
//data.supplier = Supplier.findOne({_id: session.get("active")}) // Returns correct supplier
data.supplierReady = true
}
return data;
},
這將返回第一供應商集合中沒有一個記錄在服務器上的發佈功能!但是,如果我明確地通過{ _id : user.active}
它的作品!
現在我的理解是,通過執行publish
函數中的服務器上的邏輯,我可以簡單地使用Supplier.findOne()
,但事實並非如此,我不明白爲什麼。這是對React/Meteor的限制還是我實施這個錯誤?
嗨,傑里米。感謝您提供豐富的答案。我現在瞭解委託人,問題是多個訂閱供應商集合必須存在(如您可以在供應商之間切換)。如果您能夠通過'檢查客戶端收集的狀態'來闡述或解釋您的意思,我很感興趣。你的意思只是一個計數或查詢來檢查客戶端集合? – Allreadyhome
是的,我的意思是您可以在訂閱運行之前查看客戶端集合。你可以通過console.log find().fetch()或find()。count()來快速查看,或者你可以使用其中一個可用的工具來更仔細地檢查集合。我真正喜歡和使用的是https://github.com/bakery/meteor-devtools-有些人喜歡使用蒙古語。因爲您不必在代碼或控制檯中輸入命令,所以它們使它變得更容易一些。 –
關於開發工具的好建議。謝謝! – Allreadyhome