我有一个客户有这个助手:
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>
最佳答案
您的问题是您的 returnUsersEvents()
帮助程序根本不返回任何内容。 Meteor.call() 的回调内部有一个 return 语句。这将不会成为.call()
本身的返回值。
Meteor.call()
是异步的,这意味着 .call()
将在回调内的结果可用之前返回。要实现此功能,您需要帮助程序在回调到达时返回结果,即在帮助程序第一次返回后的某个时间点。
Meteor 中实现此目的的典型模式是使用 ReactiveVar帮助器正在跟踪,并从回调内部设置该 ReactiveVar。
Here是一个 SO 答案,它展示了如何做到这一点。
在服务器上:您需要获取。否则,您将返回一个数据库游标,它不是可序列化的对象(这意味着它无法通过 DDP(Meteor 服务器通过该协议(protocol)将结果发送到客户端)返回)
关于javascript - Meteorjs - Meteor.call ('myMethod' )返回三个对象而不是一个数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40449570/