ı有一个非常简单的模板如下;
$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返回游标数据。我可以提出您的意见吗?
答案 0 :(得分:1)
替换autopublish
包的正确方法是实现Publish and Subscribe模式(这是autopublish
所做的内容),而不是使用Meteor方法。
您的上一个代码示例(直接在客户端模板帮助程序中搜索Documents
集合)完全没问题。您只需要在服务器上设置至少包含这些文档的发布(如果需要,您可以发布更多文档),并通常在创建模板时订阅它。
作为短期解决方法,您可以使用中间ReactiveVar
在模板助手中显示光标。
请参阅feed helper from a callback
此外,在您的客户端上,您必须使用Meteor.call
进行回调。它没有返回任何东西。