Backbone.js backbonejs评论投票API

Backbone.js backbonejs评论投票API,backbone.js,Backbone.js,我刚刚开始尝试使用backbone.js,在用它设计我的第一个前端模块时遇到了一个障碍。以下是我所拥有的: 我遵循了基本的todos教程,并在自定义RESTAPI上创建了一个注释系统。那里一切都好 我对每个评论都有一个向上投票或向下投票按钮,就像这样。我想调用位于的RESTAPI POST /api/comments/vote/:id 还传递参数“方向”(向上或向下) 在我的comments视图中,我有一个函数调用另一个函数,即comments模型,如下所示: vote_up: functio

我刚刚开始尝试使用backbone.js,在用它设计我的第一个前端模块时遇到了一个障碍。以下是我所拥有的:

我遵循了基本的todos教程,并在自定义RESTAPI上创建了一个注释系统。那里一切都好

我对每个评论都有一个向上投票或向下投票按钮,就像这样。我想调用位于的RESTAPI

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
来更新计数器。