Backbone.js backbonejs评论投票API
我刚刚开始尝试使用backbone.js,在用它设计我的第一个前端模块时遇到了一个障碍。以下是我所拥有的: 我遵循了基本的todos教程,并在自定义RESTAPI上创建了一个注释系统。那里一切都好 我对每个评论都有一个向上投票或向下投票按钮,就像这样。我想调用位于的RESTAPIBackbone.js backbonejs评论投票API,backbone.js,Backbone.js,我刚刚开始尝试使用backbone.js,在用它设计我的第一个前端模块时遇到了一个障碍。以下是我所拥有的: 我遵循了基本的todos教程,并在自定义RESTAPI上创建了一个注释系统。那里一切都好 我对每个评论都有一个向上投票或向下投票按钮,就像这样。我想调用位于的RESTAPI POST /api/comments/vote/:id 还传递参数“方向”(向上或向下) 在我的comments视图中,我有一个函数调用另一个函数,即comments模型,如下所示: vote_up: functio
POST /api/comments/vote/:id
还传递参数“方向”(向上或向下)
在我的comments视图中,我有一个函数调用另一个函数,即comments模型,如下所示:
vote_up: function() {
this.model.voteUp();
return false;
}
模型中的函数:
voteUp: function() {
var up_votes = this.get('up_votes') - 0;
up_votes++;
this.save({up_votes: up_votes});
}
我很确定我不需要这个。在这里保存,它实际上调用了comments API并将所有参数作为POST发送
我不知道如何以backbonejs的方式做到这一点(我正在寻找一些标准的东西)。您应该手动执行$.ajax
调用/api/comments/vote/:id
,并告诉它您是赞成票还是反对票。然后,/api/comments/vote/:id
将向数据库发送一个原子增量或减量,读取新值,并将其发送回数据库。然后,$.ajax
的成功处理程序可以执行设置
来更新客户端值
您的voteUp
实现受到一些明显的时间问题的影响:如果您的JavaScript中有6个向上投票,然后有11个其他人向上投票,并且您的voteUp
尝试告诉服务器发生了新的向上投票,因此应该有7个向上投票,会发生什么情况?您不应该尝试像这样维护计数器,即使在服务器端代码中也不应该这样
我想我想说的是,做这件事真的没有一个卑鄙的方法,有一个正确的方法和各种不正确的方法。按照正确的方式进行操作,并通过菲亚特声明这是Backboney方式。我认为标准的方式是利用Backbone的urlRoot属性
var Vote = Backbone.Model.extend({urlRoot : '/api/comments/vote'});
// ....in comments view:
vote_up: function() {
// send HTTP Post '/api/comments/vote/' -- server will create ID
new Vote({direction: 1}).save()
return false;
}
如果您需要立即输入Id,或者需要对成功插入做出反应,您可以将success
回调传递到save
请参阅:您的意思是什么?我需要从voteUp
内部调用POST/api/comments/vote/:id
。我该怎么做?啊,我明白了。我在下面留下了一个建议。API调用只会告诉服务器递增或递减,而不是递增到某个值(如您在示例中提到的7)。其中一个返回值也包括最新的投票计数,我可以用它来更新模型和视图。因此,您根本不需要save
调用,只需要一个简单的$。ajax
调用触发set
来更新计数器。