加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 20:00:33 所属栏目:百科 来源:网络整理
导读:我有一个常规的休息模式,我得到,创建,删除和更新.最重要的是,我想在该模型上调用特殊操作,如change_password. 常规的RESTful路由是传统的Rails 3路由: fetch = GET /api/models/:idsave = PUT /api/models/:idcreate = POST /api/modelsdestroy = DELETE /a
我有一个常规的休息模式,我得到,创建,删除和更新.最重要的是,我想在该模型上调用特殊操作,如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调用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读