kol*_*rie 13 backbone.js ruby-on-rails-3
我有一个定期的宁静模型,我得到,创建,删除和更新.最重要的是,我想对该模型进行特殊操作,例如change_password.
常规RESTful路由是传统的Rails 3路由:
fetch => GET /api/models/:id
save => PUT /api/models/:id
create => POST /api/models
destroy => DELETE /api/models/:id
Run Code Online (Sandbox Code Playgroud)
但是,除此之外,我还有特殊的操作:
changePassword => GET /api/models/:id/change_password
activate => GET /api/models/:id/activate
Run Code Online (Sandbox Code Playgroud)
等等.
我需要在模型上设置什么,以便识别这些新操作,以及如何将调用包装到模型方法中?
nra*_*itz 31
向模型中添加新方法相当简单 - 只需指定新方法即可.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
});
Run Code Online (Sandbox Code Playgroud)
正如一个评论,从静止的角度来看,你changePassword
和activate
操作应该不被GET方法-所有的GET方法应该是幂等.这不仅仅是RESTifarianism,它是一个好主意 - 您最终可能会缓存这些URL(因此没有任何反应)或者偶然多次击中它们(通常需要用户确认POST请求).如果可以的话,进行这些POST调用.
我建议如果可能的话添加一个密码模型/控制器,你可以调用save来更改密码.这遵循REST标准,并且内置Backbone.js的功能
如果这不是一个选项,以下是CoffeeScript示例,请将其添加到您的模型:
activate: ->
unless user.get('active')
(@sync || Backbone.sync).call @, 'activate', @,
url: "#{@url()}/users/#{message.get('id')}/activate"
data: {}
complete: =>
user.set(active: true)
@set(active: true)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4692 次 |
最近记录: |