无法弄清楚如何修改fetch?

时间:2014-11-14 05:36:10

标签: javascript backbone.js

我需要添加一个身份验证标头,到目前为止,我有这个,但我被困在这里。

initialize: function(options) {
    _.extend(this, _.pick(options, 'col'));

    this.listenTo(this.model, 'change', this.render);
    window.dispatcher.trigger('queryBox:close');

    this.model.collectionName = this.col;

    if (this.model.id) {
        this.model.fetch();
    } else {
        this.renderNew();
        this.delegateEvents();
    }
},

之前没有使用骨干,我无法如何返回结果,因此骨干可以像第一个那样渲染它?

结果本身是正确的,只需将其传递给主干。在第一个版本中,它使用默认方式来执行此操作,但无法弄清楚如何手动执行此操作。

fetch: function() {
    var self = this;

    Backbone.ajax({
            url: self.url(),
            headers: {'Authorization':jwt}
        })
        .done(function(res){
            console.log('Help')
        })
        .fail(function(jqXHR, textStatus) {
            tiedotApp.notify('danger', 'Error loading document: ' + jqXHR.responseText, 8000);
        })
},

1 个答案:

答案 0 :(得分:2)

我不建议您更改fetch的默认实现,因为可以使用 options 哈希简单地配置其行为。但是,如果你需要澄清一些事情。

model.fetch 使用jQuery.ajax()与服务器进行互动,而传递给fetch的所有选项也会传递给$.ajax()(其中一些它们可以在中间件中重写,但不适用于你的情况。)

model.fetch 需要返回承诺,将其用于完成和失败的回调链。


您可以通过几种方式实施您的任务。

<强> 1。如果模型在一个地方获取:

然后你可以改变它:

model.fetch({
              headers:  {'Authorization':jwt}, 
              success: function () { consoele.log("Help") ;}, 
              error: function(jqXHR, textStatus, errorThrown) {}
            });

<强> 2。如果模型在许多地方获取并且您需要干燥

以这种方式重写抓取:

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

    options.header['Authorization'}] = jwt;
    options.success = yourSuccessFunction;
    options.error = yourErrorFunction;   

    return this.constructor.__super__.fetch.call(this, options);
},

这样你就不会破坏原生实现。