自定义Backbone.Model操作无法正常工作

时间:2015-02-07 12:12:01

标签: javascript backbone.js coffeescript backbone-model

根据互联网上的大量资源,我尝试创建发送POST /api/v1/users/subscribe请求的自定义模型操作。我的代码如下所示:

@UserModel = Backbone.Model.extend
  urlRoot: '/api/v1/users'

  subscribe: (opts) ->
    url = "#{@urlRoot}/subscribe"
    options =
      url:    @url
      method: 'POST'
    _.extend @options, opts

    return (@sync or Backbone.sync).call this, null, this, @options

但是,使用时如下:

user = new UserModel
user.subscribe()

这是一个GET /api/v1/users请求。你能解释一下我的代码有什么问题吗?几乎所有关于自定义方法的示例都如下所示:https://gist.github.com/sap1ens/4692429我的代码是它的确切端口。

提前致谢

2 个答案:

答案 0 :(得分:2)

  

来自 backbonejs.org 选项 - 成功和错误回调以及所有其他jQuery请求选项

Backbone.sync方法的options参数接受jquery请求选项。要指定请求的类型,正确的jquery选项是'type'(jQuery.ajax)。以下代码可以使用

var UserModel = Backbone.Model.extend({
    urlRoot: '/api/v1/users',
    subscribe: function (opts) {
        var url = "this.urlRoot/subscribe"
        var options = {
            url:    url,
            type: 'POST'
        };
        _.extend( options, opts);

        return Backbone.sync.call( this, null, this, options);
    }
});

user = new UserModel();
user.subscribe();

P.S。:我不擅长咖啡剧本,所以粗略地把它翻译成普通的js。

答案 1 :(得分:1)

请注意@url: @url中的_.extend @options, opts和您的退货声明。请记住,Coffescript会将@编译为this

@UserModel = Backbone.Model.extend
  urlRoot: '/api/v1/users'

  subscribe: (opts) ->
    url = "#{@urlRoot}/subscribe"
    options =
      url: url
      type: 'POST'
    _.extend options, opts

    return (@sync or Backbone.sync).call @, null, @, options