我試圖按照「在模板助手中使用流星方法的返回值」模式概述here,但集合除外。如何使用collection.find作爲流星方法的結果?
從本質上講,我有這樣的狀況:
(服務器端)
Meteor.methods({
queryTest: function(selector) {
console.log("In server meteor method...");
return MyCollection.find(selector);
}
});
(客戶端)
Meteor.call('queryTest', {}, function(error, results) {
console.log("in queryTest client callback...");
queryResult = [];
results.forEach(function(result) {
// massage it into something more useful for display
// and append it to queryResult...
});
Session.set("query-result", queryResult);
});
Template.query_test_template.helpers({
query_test_result: function() {
return Session.get("query-result");
}
});
的問題是,我的回調(從流星.call)甚至不會被調用。
如果我用'return'foo''替換Method,那麼回調函數會被調用。另外,如果我在查找中添加「.fetch()」,它也顯示正常(但不再是反應性的,這會破壞其他所有內容)。
什麼給?爲什麼回調沒有被調用?我覺得我真的很接近,只需要正確的咒語...
如果它在所有的事情:我在客戶端上做的所有查詢都很好,但想要嘗試_ensureIndex和做全文搜索,從我可以告訴,基本上只能通過服務器端方法調用(而不是在客戶端的迷你mongo)。
編輯
好了,我遷移的事情發佈/訂閱,和整體他們的工作,但是當我試着讓它讓會話值的選擇,它不工作的權利。可能是我把「訂閱」放在哪裏的問題。
所以,我有一個發佈,採用參數「選擇器」(意圖是通過mongo選擇器)。
在客戶端,我已經訂閱喜歡:
Meteor.subscribe('my-collection-query', Session.get("my-collection-query-filter"));
但它有參差不齊的現象。在一篇文章中,它建議將這些放在Templates.body.onCreate
上。這是有效的,但不會導致某些反應(即,當我在控制檯上更改該會話值時,它不會更改顯示的值)。
因此,如果我按照另一篇文章的建議,它會將訂閱權放入調用該集合的模板的相關幫助函數中。這很好,但如果我將MULTIPLE模板調用到該集合中,我必須將其訂閱添加到它們中的每一個才能工作。
這些都不是正確的。我認爲「訂閱」是「放下管道,讓他們在那裏工作」,但這可能是錯誤的。
我會繼續閱讀文檔。也許某處,訂閱的範圍正確解釋。
經過大量進一步閱讀後,標誌指向「使用發佈/訂閱並刪除自動發佈」 - 但這真的是唯一的方法嗎? – user2671688
你會得到什麼?任何錯誤消息?您可以在回調 – Areca
否(錯誤){console.error(error)}否,回調根本沒有被調用。在[有點相關的](http://stackoverflow.com/questions/25149189/returning-cursor-results-causes-stack-size-exceeded-error)問題中,他們很好地解釋了遊標不是json-可序列化的對象,所以我懷疑發佈真的是唯一的方法,如果我想支持全文搜索。 – user2671688