尝试获取平均评级时出错模板助手中出现异常:TypeError:无法读取属性'评级'为null
getting error when trying to get average rating Exception in template helper: TypeError: Cannot read property 'rating' of null
我有两个集合recipes和reviews,用户可以查看一个recipe,并可以对其进行从1到5的评分,我正在尝试获得recipe的平均评分,但出现了错误模板助手中的异常:TypeError:无法读取null的属性'rating'你能告诉我我犯了什么错误以及如何解决吗?
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);
}
})
find返回一个游标。为了让评论成为一个数组,你需要使用这样的提取:
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);
}
});
推荐阅读:流星常见错误。
相关文章:
- jquery TypeError: Response is null
- 在javascript中,我正在使用EventListener,并且我得到了TypeError xyz = null
- Quicksort.js未捕获的typeError无法读取null的属性
- Uncaught TypeError:对象原型在Symfony 2中只能是Object或ExtJS为null
- 为什么TypeError:document.getElementById()为null
- TypeError (null reference exception) when using dom-construc
- Rails JavaScript 包含 TypeError:“null”不是一个对象(评估 'document.
- getElementById TypeError: “无法将属性'innerHTML'设置为null
- Ember JS : uncatch TypeError: 無法讀取 null 的屬性 'createRecor
- TypeError: this.element is null, Rails with Judge gem
- TypeError:超级表达式必须是 null 或函数,而不是使用 Babeljs 未定义
- TypeError: jasmine.getEnv().currentSpec is null
- gapi.auth.authorize: TypeError: cv(...) is null
- pdfmake.js uncatch TypeError:无法读取 null 的属性“length”
- Javascript 错误:TypeError:“null”不是 safari 上的对象(评估“event.target
- 循环GM_xmlhttpRequest给出“;TypeError Null”;在变量上
- 如何修复TypeError: 'null'不是一个对象(求值'e.parentNode'
- TypeError: null不是对象(计算'document.getElementById(x).style&
- TypeError ';null '没有属性';添加控件时
- 如何修复:TypeError: 'null'不是一个对象(计算'event.relatedTar