Meteor - 从方法返回集合对象

时间:2014-10-09 05:27:59

标签: javascript meteor

我正在尝试根据设置的会话从Meteor方法返回一个集合对象。

这是方法调用:

Template.batches.search = function () {
    if (typeof Session.get('search-parameters') != 'undefined') {

        var searchParameters = Session.get('search-parameters');

        return Meteor.call('search', searchParameters, function(error , result){
            if (error) {
                console.log(error.reason);
            } else{
                return result;
            }
        });
    }
}

这是被称为L

的方法
Meteor.methods({
    search: function (session) {
        return Batches.find({event: { $regex: session}});
    }
});

我读过一个方法不能返回一个集合对象,而是使用fetch()代替。这会返回一个数组,但是,我无法像colleciton对象一样遍历数组以返回结果。请指教。

1 个答案:

答案 0 :(得分:0)

模板助手需要同步。有几种方法可以解决这个问题,但这是一个例子:

Template.batches.created = function() {
  // this will be cleaned up for you when the template is destroyed
  this.autorun(function() {
    var search = Session.get('search-parameters');
    Meteor.subscribe('batchesForSearch', search);
  });
};

Template.batches.helpers({
  search: function() {
    var search = Session.get('search-parameters');
    return Batches.find({event: {$regex: search}});
  }
});

batches模板中,创建一个自动运行,只要会话发生变化,就会预订batchesForSearch。文档到达客户端后,将通过search帮助程序将其提供给您的模板。

batchesForSearch发布功能可能如下所示:

Meteor.publish('batchesForSearch', function(search) {
  check(search, String);

  if (_.isEmpty(search)) {
    // make sure we do not publish the entire collection if search is empty 
    return this.ready();
  } else {
    return Batches.find({event: {$regex: search}});
  }
});

请注意,如果搜索为空,我们会小心避免发布整个集合。