2014-08-29 26 views
0

我一直在試圖找到一種方法來動態地拋出一個來自數據庫通過鐵路由器和控制器的find()條件,這可能嗎?例如:從數據庫中的鐵路由器和post.find()條件

.. .. 

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

}); 

.. .. 

上面的代碼是靜態的。 ['蘇打水','果汁']部分是我想要從數據庫,特別是從Meteor.user()對象和.profile.likesSoda屬性。基本上,我想根據用戶配置文件中保存的值來過濾結果。不幸的是,我沒有很幸運。當我使用Meteor.user()或Meteor.users.findOne(_id:Meteor.userId())時,它們最初是未定義的(最終會出現某些內容),因此它們會導致錯誤。

任何想法爲什麼Meteor.userId()是容易訪問與Data()函數內的Meteor.user()?

回答

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:[]}; 
    } 
} 
+0

啊,夥計,太棒了!它終於可以正常工作而不會拋出任何這些應用程序闖入錯誤。 – shibekin69 2014-08-29 23:53:45