我正在使用 Meteor 1.0 这可能是初学者常见的错误,但我似乎找不到解决方案。
当我要求服务器返回集合时,没有显示结果。但是,我的控制台日志显示了良好的结果。 这是客户端助手:
Template.myProjectTips.helpers({ matchingProjects: function() { Meteor.call('searchNearProjects', function(error, result) { if (error) { console.log(error.reason); return; } else { var fields = [{}]; _.each(result, function(field) { fields = field; console.log('result: ' + fields.title); }); return fields; } }); }, });
有人可以帮我解决这个问题吗?
最佳答案
首先,您的方法应该返回一个游标,因此您应该删除 .fetch()
,它实际上会遍历游标以返回一个数组。 Meteor 原生支持和推广 Cursor。
Meteor.methods({
searchNearProjects: function() {
return Project.find({}, {sort: {createdAt: -1}, limit: 10});
}
});
此外,在模板代码中,您正在替换数组,而不是应该填充它。但由于您使用的是实时光标,因此您也不需要所有 _.each()
遍历。因此您可以简单地执行以下操作:
Template.myProjectTips.helpers({
matchingProjects: function() {
Meteor.call('searchNearProjects', function(error, result) {
if (error) {
console.log(error.reason);
return;
} else {
return result;
}
});
}
});
但是对于像这样非常简单的 Mongo 查询,您不应该使用 Meteor.method
相反,您应该像这样发布和订阅:
服务器:
Meteor.publish("nearProjects", function () { return Project.find({}, {sort: {createdAt: -1}, limit: 10}); });
客户:
Meteor.subscribe("nearProjects");
Template.myProjectTips.helpers({
matchingProjects: function() {
return Project.find({}, {sort: {createdAt: -1}, limit: 10});
}
});
或者,如果您想使用某些查找条件进行发布,您也可以将参数传递给订阅和发布函数。
关于javascript - meteor 调用没有给出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063710/