我有一个常规的休息模式,我得到,创建,删除和更新.最重要的是,我想在该模型上调用特殊操作,如change_password.
常规的RESTful路由是传统的Rails 3路由:
fetch => GET /api/models/:id save => PUT /api/models/:id create => POST /api/models destroy => DELETE /api/models/:id
但是,除此之外,我还有特殊的操作:
changePassword => GET /api/models/:id/change_password activate => GET /api/models/:id/activate
等等.
解决方法
将新方法添加到模型中相当简单 – 只需在.extend()中指定新方法即可.您必须自己编写一些这些内容,但您可以利用现有的机器,例如Backbone.sync(大多只是围绕$.ajax()的包装)和Model的现有url属性:
var MyModel = Backbone.Model.extend({ activate: function(opts) { var model = this,url = model.url() + '/activate',// note that these are just $.ajax() options options = { url: url,type: 'POST' // see my note below }; // add any additional options,e.g. a "success" callback or data _.extend(options,opts); return (this.sync || Backbone.sync).call(this,null,this,options); },// etc });
就像一个注释一样,从REST的角度来看,你的changePassword和activate操作不应该是GET方法 – 所有GET方法都应该是幂等的.这不仅仅是RESTifarianism,这是一个好主意 – 你可以最终缓存这些URL(所以没有任何反应)或多次碰到他们(通常需要POST请求的用户确认).如果可以,进行这些POST调用.