如何在辅助函数之外使用find / findOne

时间:2016-01-25 10:23:51

标签: angularjs meteor angular-meteor

我正在尝试使用findOne语句在转换函数中访问集合中的文档。

  this.helpers({
    posts: function () {
      return Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}, transform: function (doc) {
        var restaurant = Restaurants.findOne(doc.rest_id);
          doc.restaurant = restaurant.name;
          doc.neighborhood = restaurant.neighborhood;
        return doc;
      }});
    }
  });

问题是对findOne的调用没有返回任何内容(未定义)。同样,使用find.fetch()返回一个空数组。

在排除故障后,我发现在我的代码中的任何地方运行find或findOne,除了直接作为帮助程序(即返回Posts.find()工作正常)不返回任何内容。我已经读过客户端此时可能尚未完成订阅数据,但客户端没有任何内容显示。

运行相同的Restaurants.find或findOne在控制台上正常工作,返回预期的文档。

我是否尝试做角度流星不支持的事情? find函数是否仅在帮助程序的上下文中受支持?

1 个答案:

答案 0 :(得分:0)

我认为你在这里缺少的部分是Mongo调用transform函数(即在Mongo调用中):这不是回调函数。

因此,您需要获取文档,然后为每个获取的文档找到findOne。

this.helpers({
    posts: function () {
      var my_posts = Posts.find(this.getReactively('filter'), {sort: {createdAt: -1}).fetch();
      my_posts.forEach(function (doc) {
        var restaurant = Restaurants.findOne(doc.rest_id);
          doc.restaurant = restaurant.name;
          doc.neighborhood = restaurant.neighborhood;
        return doc;
      }
    });        
});