2016-04-28 42 views
4

我試圖按照「在模板助手中使用流星方法的返回值」模式概述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模板調用到該集合中,我必須將其訂閱添加到它們中的每一個才能工作。

這些都不是正確的。我認爲「訂閱」是「放下管道,讓他們在那裏工作」,但這可能是錯誤的。

我會繼續閱讀文檔。也許某處,訂閱的範圍正確解釋。

+0

經過大量進一步閱讀後,標誌指向「使用發佈/訂閱並刪除自動發佈」 - 但這真的是唯一的方法嗎? – user2671688

+0

你會得到什麼?任何錯誤消息?您可以在回調 – Areca

+0

否(錯誤){console.error(error)}否,回調根本沒有被調用。在[有點相關的](http://stackoverflow.com/questions/25149189/returning-cursor-results-causes-stack-size-exceeded-error)問題中,他們很好地解釋了遊標不是json-可序列化的對象,所以我懷疑發佈真的是唯一的方法,如果我想支持全文搜索。 – user2671688

回答

0

您需要發佈您的數據並在您的客戶端進行訂閱。 如果您還沒有刪除「自動發佈」,那麼您擁有的所有內容都將自動發佈。所以當你在客戶端查詢一個集合時(例如在一個輔助方法中),你會得到結果。該軟件包僅用於快速開發和原型設計,但在實際應用中應該刪除。您應該根據應用的需求和用例發佈數據。 (並非所有用戶都必須查看所有用例中的所有數據)

+0

感謝您的幫助,我已經完成了上週的工作。這基本上是正確的答案。 我仍然需要去了解何時訂閱以及如何在必要時更新內容等方面的最佳實踐,但我可以看到一些文章顯示「每個模板訂閱」設計模式,所以我確定它是不太可怕。 乾杯! – user2671688

相關問題