我正在尝试遵循此处概述的“在模板帮助器中使用Meteor方法的返回值”模式,但集合除外。
本质上,我有这样的事情:
(服务器端)
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");
}
});
问题是,我的回调(来自Meteor.call)甚至没有被调用。
如果我仅用“ return“ foo”“替换Method,则回调会被调用。另外,如果我在查找中添加“ .fetch()”,它也会显示正常(但不再是反应式的,这会破坏其他所有内容)。
是什么赋予了?为什么不调用回调?我觉得我真的很亲密,只需要正确的咒语...
如果真的很重要:我在客户端上进行了所有查询就很好了,但是想尝试_ensureIndex之类的东西并进行全文搜索,据我所知,基本上只能通过服务器端方法使用呼叫(而不是在客户端上的mini-mongo中)。
编辑
好的,所以我迁移了发布/订阅的东西,并且总体上它们都在工作,但是当我尝试使其成为会话值作为选择器时,它就无法正常工作。可能与我放置“订阅”的位置有关。
因此,我有一个采用参数“选择器”的发布(目的是传递mongo选择器)。
在客户端上,我已经订阅了:
Meteor.subscribe('my-collection-query', Session.get("my-collection-query-filter"));
但是它的行为参差不齐。在一篇文章中,它建议将它们放在上Templates.body.onCreate
。那行得通,但不会产生任何反应(例如,当我在控制台上更改该会话值时,它不会更改显示的值)。
因此,如果我遵循另一篇文章的建议,则会将订阅权限放入调用该集合的模板的相关帮助函数中。效果很好,但是如果我有多个模板调用该集合,则必须将订阅添加到其中的每个模板才能起作用。
这些似乎都不是对的。我认为“订阅”是“放下管道并将它们留在那里工作”,但这可能是错误的。
我将继续阅读文档。也许在某处正确解释了订阅的范围。
您需要发布数据并在客户端中对其进行订阅。如果您尚未删除“自动发布”,那么您拥有的所有内容都会自动发布。因此,当您在客户端上查询集合时(例如,在一个辅助方法中),您将获得结果。该软件包仅用于快速开发和原型制作,但在实际应用中应将其删除。您应该根据应用程序的需求和用例发布数据。(并非所有用户都必须查看所有用例中的所有数据)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句