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

时间:2017-04-19 08:05:13

标签: meteor meteor-blaze

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

$geo_location = file_get_contents('http://freegeoip.net/json/'.$_SERVER['HTTP_CLIENT_IP']);
print_r($geo_location);

我正在用帮助器填充HTML中的列表;

<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>

'getLastEditors'方法通过MongoDB查询返回数据;

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

使用此代码,不会显示应显示为列表的数据。但是,如果我直接从帮助程序进行Mongo数据库查询,一切都会变好。以下是工作助手代码。 (不删除autopublish包)

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

如您所知,ı无法继续使用autopublish包,我必须实现Meteor.methods()。我不明白为什么从模板中不显示从Meteor.method返回游标数据。我可以提出您的意见吗?

1 个答案:

答案 0 :(得分:1)

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

您的上一个代码示例(直接在客户端模板帮助程序中搜索Documents集合)完全没问题。您只需要在服务器上设置至少包含这些文档的发布(如果需要,您可以发布更多文档),并通常在创建模板时订阅它。

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

请参阅feed helper from a callback

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

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