我刚开始尝试使用backbone.js,并在设计我的第一个前端模块时遇到了障碍。这就是我所拥有的:
我遵循了基本的todos教程,并在我的自定义REST API上创建了一个评论系统。一切都很好。
我对每个评论都有一个投票或投票按钮,就像SO一样。我想调用位于
的REST APIPOST /api/comments/vote/:id
还传递参数“方向”(向上或向下)。
在我的评论视图中,我有一个函数调用另一个函数,它的注释模型如下:
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});
}
我很确定我在这里不需要this.save
实际调用注释API并将所有参数作为POST发送。
我不知道如何以脊柱方式做到这一点(我正在寻找标准的东西)。
答案 0 :(得分:0)
您应该对$.ajax
进行手动/api/comments/vote/:id
来电,并告诉您是否有upvote或downvote。然后/api/comments/vote/:id
将原子递增或递减发送到数据库,读出新值,然后发回。然后,$.ajax
的成功处理程序可以set
更新客户端值。
您的voteUp
实施受到一些明显的时间问题的影响:如果您的JavaScript中有6个upvotes,然后其他11个人投票,并且您的voteUp
尝试告诉服务器新的upvote已经发生,所以应该有7个upvotes?您不应该尝试维护这样的计数器,甚至不要在服务器端代码中维护。
我想我想说的是没有Backboney方法可以做到这一点,有正确的方法和各种不正确的方法。以正确的方式做,并通过命令宣布这是Backboney方式。
答案 1 :(得分:0)
我认为标准方法是利用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
。