【问题标题】:How can I use collection.find as a result of a meteor method?我如何使用 collection.find 作为流星方法的结果?
【发布时间】:2016-08-22 16:24:45
【问题描述】:

我正在尝试遵循here 概述的“在模板助手中使用 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"' 替换方法,那么回调确实会被调用。此外,如果我在查找中添加“.fetch()”,它也会显示正常(但不再是反应性的,这会破坏其他所有内容)。

什么给了?为什么没有调用回调?我觉得我真的很亲密,只需要正确的咒语......

如果这很重要:我在客户端进行所有查询都很好,但想尝试 _ensureIndex 之类的东西并进行全文搜索,据我所知,基本上只能通过服务器获得-side 方法调用(而不是在客户端的 mini-mongo 中)。


编辑

好的,所以我迁移了发布/订阅的东西,总体而言它们正在工作,但是当我尝试将其设置为会话值是选择器时,它无法正常工作。可能是我把“订阅”放在哪里的问题。

所以,我有一个带有参数“选择器”的发布(目的是传入 mongo 选择器)。

在客户端,我订阅如下:

Meteor.subscribe('my-collection-query', Session.get("my-collection-query-filter"));

但它的行为参差不齐。在一篇文章中,它建议将这些放在Templates.body.onCreate 上。这有效,但不会导致某些反应(即,当我在控制台上更改该会话值时,它不会更改显示的值)。

所以,如果我遵循另一篇文章的建议,它会将订阅权放在调用该集合的模板的相关帮助函数中。这很好用,但如果我有 MULTIPLE 模板调用该集合,我必须将订阅添加到每个模板才能正常工作。

这些似乎都不对。我认为“订阅”是“放下管道,让它们在那里工作”,但这可能是错误的。

我会继续阅读文档。也许在某个地方,订阅的范围得到了适当的解释。

【问题讨论】:

  • 在进一步阅读之后,有迹象表明“使用发布/订阅并删除自动发布”——但这真的是唯一的方法吗?
  • 你得到了什么?任何错误信息?您可以在回调中使用 if(error) { console.error(error) }
  • 不,回调根本没有被调用。在这个somewhat-related 问题中,他们很好地解释了游标不是 json 可序列化的对象,所以如果我想支持全文搜索,我怀疑发布确实是唯一的方法。

标签: meteor


【解决方案1】:

您需要发布您的数据并在您的客户端中订阅它。 如果您还没有删除“自动发布”,那么您拥有的所有内容都将自动发布。因此,当您在客户端查询集合时(例如在帮助方法中),您会得到结果。该软件包仅用于快速开发和原型设计,但在实际应用程序中应将其删除。您应该根据应用的需求和用例发布数据。 (并非所有用户都必须查看所有用例中的所有数据)

【讨论】:

  • 感谢您的帮助,上周我已经完成了所有工作。这基本上是正确的答案。我仍然需要了解何时订阅以及如何在必要时等待更新的最佳实践,但我可以看到一些显示“按模板订阅”设计模式的文章,所以我确信它不是太糟糕的。干杯!
猜你喜欢
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 2015-04-06
  • 2016-03-24
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多