【问题标题】:want to show average rating and total reviews of product想要显示产品的平均评分和总评论
【发布时间】:2015-10-08 14:35:09
【问题描述】:

我是初学者,并按照教程制作评论产品应用程序,而不是仅仅复制粘贴代码尝试对其进行一些实验以获得更深入的知识。我有两个关于我的应用的问题

1) 我为我的应用添加了更多功能,并在 includes.jsreviews.html 中编写了一些代码来显示平均评分和产品的总评论。如何显示被点击产品的平均评分和评论数量?

2) 我通过 chrome 控制台手动添加产品类别列表以显示在侧边栏中(例如电子、时尚、书籍),例如像这样

Categories.insert({name:'Eelctronics',slug:'electronics'});

所以我已经在免费的流星托管上部署了这个应用程序,每次有人运行这个应用程序时,他必须在 chrome 控制台中手动编写上述代码以获取类别列表。即使有人从 gitHub 克隆我的项目也不能查看左侧栏中的类别列表,他还必须在控制台中编写相同的代码。那么解决方案是什么?如何在我的侧栏中显示类别列表而无需在控制台中编写上述代码?

您可以查看 gitHub repository 获取源代码。

【问题讨论】:

    标签: mongodb meteor meteor-blaze


    【解决方案1】:

    1) 显示平均评分和评论数

    <p>Average Rating: <img class="stars" src="/img/star{{averageRating}}.png"> ({{countReviews}})</p>
    

    我已将此代码移至 reviews.helpers 部分

    Template.reviews.helpers({
      'reviews': function () {
        return Reviews.find({productId: Router.current().data()._id})
      },
    
      countReviews: function(){
        return Reviews.find({productId: Router.current().data()._id}).count();
      },
    
      averageRating: function() {
        var reviews = Reviews.find({productId: Router.current().data()._id}); //get all reviews for productId
        //var ratings = reviews.map(function(player){return player.score;}); // get just the ratings, or use _.pluck
        var ratings = _.pluck(reviews, 'ratings'); // get just the ratings i.e. [1, 5, 3, 2, 5]
        var sum = ratings.reduce(function(pv, cv){return pv + cv;}, 0);  //sum ratings i.e. 14
        var avg = sum / ratings.length;  // i.e. 2.8
        return Math.round(2.8);  // round avg to ensure only integer values are returned
      },
    
    })
    

    2) 种子数据库

    Docs 将 Meteor.startup 块添加到种子数据库

    // On server startup, if the database is empty, create some initial data.
    if (Meteor.isServer) {
      Meteor.startup(function () {
        if (Categories.find().count() === 0) {
          Categories.insert({name:'Electronics',slug:'electronics'});
          Categories.insert({name:'Fashion',slug:'fashion'});
          Categories.insert({name:'Books',slug:'books'});
        }
      });
    }
    

    【讨论】:

    • 你能帮我解决第一个问题吗,如何显示被点击产品的总评论和平均评分? @JeremyK
    • averageRating 辅助函数仍未显示平均评分。您能否还解释一下该功能是如何工作的? @Jeremyk
    • 当然我会把它分解成更多的步骤。
    • 我有另一个项目和几乎相同的代码,除了字段名称是评级而不是评论集合中的评级以获得平均评级,但我收到错误模板帮助程序中的异常:TypeError:无法读取 null 的属性“评级” @JeremyK
    • 这是否回答了您最初的问题?如果是这样,您应该接受答案。如果您有新问题,请发布新问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多