我一直试图通过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()轻松访问?
答案 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:[]};
}
}