在 blaze 模板中显示光标数据不适用于 Meteor.call()

Displaying cursor data within a blaze template does not work with Meteor.call()

我有一个非常简单的模板如下;

<template name="editingUsers">
    <div class="container">
        <div class="jumbotron">
            <ul class="custom-list-stye">
                {{#each lastEditors}}
                    <li><span><strong>{{docUser.name}}</strong></span> </li>
                {{/each}}
            </ul>
        </div>
    </div>
</template>

我正在用助手填写 HTML 中的列表;

Template.editingUsers.helpers({
    lastEditors:  function () {
        return Meteor.call('getLastEditors');
    }
});

'getLastEditors'方法returns数据通过Mongo数据库查询;

getLastEditors: function () {
        if(Meteor.user()) {
            const lastEditors = Documents.find(
                {docUser: {$exists: true }},
                {
                    limit:5,
                    sort: { lastEdit: -1 },
                });
            return lastEditors;
        }
    }

使用这段代码,应该显示为列表的数据没有出现。但是,如果我直接从助手进行 Mongo 数据库查询,一切都会变得正常。以下是工作助手代码。 (未删除自动发布包)

Template.editingUsers.helpers({
    lastEditors:  function () {
        return Documents.find(
            {docUser: {$exists: true }},
            {
                limit:5,
                sort: { lastEdit: -1 },
            });
    }
});

如您所知,我无法继续使用自动发布包,我必须实施 Meteor.methods()。我不明白为什么模板中没有显示从 Meteor.method 返回的游标数据。请问您有什么意见吗?

替换 autopublish 包的正确方法是实现 Publish and Subscribe 模式(这是 autopublish 在幕后所做的),而不是使用 Meteor 方法。

你的最后一个代码示例(你直接在客户端模板助手中搜索你的 Documents 集合)非常好。您只需要在您的服务器上设置一个至少包含这些文档的发布(如果需要,您可以发布更多文档),然后订阅它,通常是在您的模板创建时。

作为短期解决方法,您可以使用中间方法 ReactiveVar 在模板助手中显示光标。

此外,在您的客户端上,您必须使用 Meteor.call 回调。它没有 return 任何东西。

http://docs.meteor.com/api/methods.html#Meteor-call