来自数据库的Iron Router和post.find()条件

时间:2014-08-29 13:41:08

标签: meteor iron-router

我一直试图通过Iron Router和控制器找到一种动态引入数据库的find()条件的方法,这可能吗?例如:

.. ..

HomeController = PostsListController.extend({
data: function() {
    return {
        posts: Posts.find({ likeDrinks: {$in: ['soda','juice']} }, this.findOptions()),
    };
}

});

.. .. 

上面的代码可以作为静态的东西。 [' soda','] 部分是我想要来自数据库的部分,特别是来自Meteor.user()对象和.profile.likesSoda财产。基本上,我想根据用户配置文件中保存的值过滤结果。不幸的是,我没有多少运气。当我使用Meteor.user()或Meteor.users.findOne(_id:Meteor.userId())时,它们最初是未定义的(最终会出现问题),因此它们会导致错误。

为什么Meteor.userId()可以在data()函数中与Meteor.user()轻松访问?

1 个答案:

答案 0 :(得分:0)

Data函数在反应计算中运行,因此只要更改了Posts.find或更改了Meteor.user(),它就会重新运行。 下面的示例演示如何安全地运行Posts.find而不用担心未定义的问题。

data:function(){
  var user = Meteor.user();
  var likesSoda = user && user.profile && user.profile.likesSoda;
  if(likesSoda){
  return   {
             posts: Posts.find({ likeDrinks: {$in: likesSoda} }, this.findOptions()),
           };
  }else{
    return {posts:[]};
  }
}