想要显示产品的平均评分和总评论

时间:2015-10-07 09:47:46

标签: mongodb meteor meteor-blaze

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

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

2)我添加了产品类别列表,通过Chrome控制台显示在侧栏(例如电子产品,时装,书籍)中,手动添加它们,例如

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

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

您可以查看gitHub repository了解源代码。

1 个答案:

答案 0 :(得分: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'});
    }
  });
}