我有两个集合、菜谱和评论,用户可以查看一个菜谱,并将其评分从1到5,我正在尝试获得菜谱的平均评分,但在模板助手中获得错误异常: TypeError:无法读取空的属性“评级”,请您指导我犯了什么错误,以及如何解决它。
collections.js
Recipes = new Mongo.Collection('recipes');
Reviews = new Mongo.Collection('reviews');add_review.js
Template.add_review.events({
'submit .add-review':function(event){
var rating = event.target.rating.value;
var review = event.target.review.value;
Reviews.insert({
rating:rating,
review:review,
recipeId:Router.current().data()._id
});
return false;
})助手获得平均评分
Template.reviews.helpers({
averageRating: function() {
var reviews = Reviews.find({recipeId: Router.current().data()._id});
var ratings = _.pluck(reviews, 'rating');
var sum = ratings.reduce(function(pv, cv){return pv + cv;}, 0);
var avg = sum / ratings.length;
return Math.round(avg);
}
})发布于 2015-11-08 17:54:19
发现返回一个游标。为了使评论成为一个数组,您需要像这样使用获取:
var reviews = Reviews.find({recipeId: Router.current().data()._id}).fetch();还请注意,您需要防范评级为空数组的情况。在这种情况下,您的平均值将返回Infinity。也许是这样:
Template.reviews.helpers({
averageRating: function() {
var selector = {recipeId: Router.current().data()._id};
var reviews = Reviews.find(selector).fetch();
if (reviews.length === 0)
return 0;
var ratings = _.pluck(reviews, 'rating');
var sum = ratings.reduce(function(pv, cv){return pv + cv;}, 0);
var avg = sum / ratings.length;
return Math.round(avg);
}
});推荐阅读:流星常见错误。
https://stackoverflow.com/questions/33596546
复制相似问题