![](/img/trans.png)
[英]javascript disabling a div or a link? (for a 5-star rating system)
[英]5-star rating system with four attributes
我找不到这个的任何实现。
我需要使用Parse.com建立一个评分系统,其中每个对象都有四个可以从1到5排名的属性。我所知道的是,我必须为此设置一个单独的类。 至此,我所做的就是表的列看起来如何:
objectId
在Parse
每个对象时都有它
attr1
(int)属性编号1
attr2
(int)属性2
attr3
(int)属性3
attr4
(int)属性编号4
objectPointer
Pointer
额定对象的Pointer
votesSum
-(两倍)总和
它将像这样工作:将每个比率添加到现有比率,并且当某人想知道特定对象的比率是多少时,则将每个属性的总和除以votesSum
。 当然,还有其他问题:-如何避免同一用户对同一对象进行评级? (也许是数组?)-如何让用户修改其评分(这是更大的问题)
我在这里寻找非常简单的概念。 也许您以前曾经遇到过这个问题。
通过在评级对象上包含指向用户的指针,可以解决两个问题。 可以在beforeSave
上不允许使用beforeSave
, beforeSave
它将尝试使用相同的objectPointer和相同的userPointer(新列)来查找现有的评分。
而且,在找到现有评级后, beforeSave
可能会返回错误,或者-甚至更好-只需修改该现有评级,这就是该应用将允许用户修改其评级的方式。
对于具有数千个评级的系统 。 保持收视率总计对象也很有意义。
总结一下:
Rating object:
objectPointer - pointer to object being rating
userPointer - pointer to the user doing the rating
attr1 - (int) rating for the objects attr1
attr2 - etc
(no sum here)
RatingTotal object:
objectPointer - pointer to object being rating
ratingsCount - (int) total rating objects that exist for this objectPointer
totalAttr1 - (int) sum of rating objects attr1
totalAttr2 - etc
Parse.Cloud.beforeSave("Rating", function(request, response) {
// find out if there's an existing rating object
var query = new Parse.Query("Rating");
query.equalTo("objectPointer", request.object.objectPointer);
query.equalTo("userPointer", request.object.userPointer);
query.find().then(function(result) {
// one exists? just delete it, and this save will replace it
return (result)? result.destroy() : null;
}).then(function() {
// update the summary object
var query = new Parse.Query("RatingTotal");
query.equalTo("objectPointer", request.object.objectPointer);
return query.find();
}).then(function(result) {
var RatingTotal = Parse.Object.extend("RatingTotal");
// create one if it doesn't exist
var ratingTotal = (result)? result : new RatingTotal();
ratingTotal.set("ratingsCount", 1+ratingTotal.get("ratingsCount"));
var attr1 = request.object.get("attr1");
ratingTotal.set("totalAttr1", attr1+ratingTotal.get("totalAttr1"));
// and so on for attrs 2, 3, etc
return ratingTotal.save();
}).then(function() {
response.success();
}, function(error) {
response.error(error);
});
});
请注意,如果我们找到一个现有的Rating对象,其中同一用户正在对同一对象进行评分,那么我们只是删除现有对象。 由于我们是在beforeSave上执行的,因此新的将被有效保存并编辑原始文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.