流星呼叫没有结果

时间:2015-01-21 09:32:01

标签: javascript meteor

我正在使用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;
          }
      });

  },
});

有人能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

首先,你的方法应该返回一个游标,所以你应该删除实际遍历游标的.fetch()以返回一个数组。 Mersor在Meteor中本地支持和提升。

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});
  }
});

或者,如果您想要发布一些查找条件,您也可以将您的参数传递给您的订阅和发布函数。