无法将自定义标头传递给Backbone的提取

时间:2015-12-09 14:03:57

标签: backbone.js

ERS。

我正在尝试实现我的自定义集合,其中我覆盖了fetch方法。稍后我将使用此集合来扩展我的Backbone集合。

var BaseCollection = Backbone.Collection.extend({

    fetch: function (options) {
        options = options || {};

        if (!options.headers) {
            options.headers = {
                'Content-type': 'application/json',
                'Accept': 'application/json',
                'Authorization' : "Basic: user:password"
            };
        }

        options.reset = true;

        console.log('I am extended fetch method');

        return Backbone.Collection.prototype.fetch.call(this, options);
    }
});

var ShipsCollection = BaseCollection.extend({
    url: 'http://localhost:3000/v1/ships',
    model: Ship
});

但是当我为我的收藏品调用fetch时,我看不到标题被发送到服务器:

var shipsCollection = new ShipsCollection();
shipsCollection.fetch();

enter image description here

如何扩展fetch以发送自定义标题 ?我不想overwrite sync

2 个答案:

答案 0 :(得分:2)

正如你可以从@nikoshr在评论中分享的fiddle看到的那样,代码似乎有效。

但是,如果options.headers存在,您的代码将无效。我建议修改代码如下:

fetch: function(options) {
  options = options || {};
  var custom = {
    'Content-type': 'application/json',
    'Accept': 'application/json',
    'Authorization': "Basic: user:password"
  };
  options.headers = options.headers ? _.extend(options.headers, custom) : custom;

  options.reset = true;
  return Backbone.Collection.prototype.fetch.call(this, options);
}

答案 1 :(得分:0)

在我的情况下,它是一个AdBlock插件。当我删除它一切都很顺利。