首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模板助手中获取平均评等异常时出错: TypeError:无法读取空的属性“评级”

问在模板助手中获取平均评等异常时出错: TypeError:无法读取空的属性“评级”
EN

Stack Overflow用户
提问于 2015-11-08 17:02:30
回答 1查看 329关注 0票数 0

我有两个集合、菜谱和评论,用户可以查看一个菜谱,并将其评分从1到5,我正在尝试获得菜谱的平均评分,但在模板助手中获得错误异常: TypeError:无法读取空的属性“评级”,请您指导我犯了什么错误,以及如何解决它。

collections.js

代码语言:javascript
复制
Recipes = new Mongo.Collection('recipes');
Reviews = new Mongo.Collection('reviews');

add_review.js

代码语言:javascript
复制
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;
})

助手获得平均评分

代码语言:javascript
复制
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);
    }
})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-08 17:54:19

发现返回一个游标。为了使评论成为一个数组,您需要像这样使用获取:

代码语言:javascript
复制
var reviews = Reviews.find({recipeId: Router.current().data()._id}).fetch();

还请注意,您需要防范评级为空数组的情况。在这种情况下,您的平均值将返回Infinity。也许是这样:

代码语言:javascript
复制
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);
  }
});

推荐阅读:流星常见错误。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33596546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档