我有一个有这个帮手的客户:
Template.eventTemplate.helpers({
returnUsersEvents: function(){
Meteor.call("events.getByUserId", function(error, result){
if(error){
console.log("error" + error.reason);
return;
}
console.log(result);
return result;
});
}
});
收集方法
Meteor.methods({
'events.insert'(Event) {
Events.insert(Event);
},
'events.getByUserId'(){
var events = Events.find({UserId: Meteor.userId()}).fetch();
console.log(events);
return events;
}
})
我的收藏中有一个对象。但我检索了三个相同类型的对象。谁能告诉我我做错了什么?
这是我的模板
<ul class="demo-list-item mdl-list">
{{#each returnUsersEvents}}
<li class="mdl-list__item">
<span class="mdl-button mdl-button--colored mdl-js-button mdl-js-ripple-effect">
<i class="material-icons mdl-list__item-icon">map</i>
<a class="" href="/event/{{_id}}">{{EventName}}</a>
</span>
</li>
{{/each}}
</ul>
答案 0 :(得分:3)
您的问题是您的returnUsersEvents()
助手根本没有返回任何内容。您在Meteor.call()的回调中有一个返回语句。这将不成为.call()
本身的返回值。
Meteor.call()
是异步的,这意味着.call()
将在回调中的结果可用之前返回。为了使这个工作,你需要帮助器从回调到达时返回结果,这是在帮助者第一次返回后的某个时间点。
Meteor中实现此目的的典型模式是使用帮助程序正在跟踪的ReactiveVar,并从回调内部设置ReactiveVar。
Here是一个SO答案,展示了如何做到这一点。
在服务器上:你需要获取。否则,您将返回一个数据库游标,该游标不是可序列化的对象(这意味着它无法通过DDP返回,即Meteor服务器将结果发送给客户端的协议)