ruby-on-rails-3 – Backbone.js在一个宁静的模型上使用非静止的动作

前端之家收集整理的这篇文章主要介绍了ruby-on-rails-3 – Backbone.js在一个宁静的模型上使用非静止的动作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个常规的休息模式,我得到,创建,删除和更新.最重要的是,我想在该模型上调用特殊操作,如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调用.

猜你在找的Ruby相关文章