如果我有一个jQuery jqXHR响应对象,我可以看看它是对POST还是GET的响应?

时间:2014-02-03 16:11:28

标签: javascript backbone.js xmlhttprequest jqxhr

这基本上是原始问题减少到:

我有一个Backbone模型,我希望每次save成功时都执行某个操作,但不是在fetch之后执行。正如我所看到的那样,最简洁和最少侵入性的方法是将一个处理程序附加到sync事件并检查XHR对象:如果它是对GET的响应,则执行一项操作,如果是,则执行另一项操作这是一个POST。

然而,看起来我无法确定jqXHR是为了响应而创建的HTTP方法...还是我可以?

2 个答案:

答案 0 :(得分:2)

您可以像这样覆盖Backbone.sync方法:

var sync = Backbone.sync;

Backbone.sync = function(method, model, options) { // override the Backbone sync

                    // override the success callback if it exists
                    var success = options.success;
                    options.success = function(resp) {
                    if (success) success(model, resp, options);
                        // trigger the event that you want
                        model.trigger(methodMap[method]);
                    };

                    sync.call(this, method, model, options);
                };

methodMap看起来像:

var methodMap = {
'create': 'POST',
'update': 'PUT',
'patch':  'PATCH',
'delete': 'DELETE',
'read':   'GET'
}

因此,为了捕获GET / POST方法,您所要做的就是:

initialize: function() { // your view initialize
    this.listenTo(this.model, "GET", /* your GET callback */);
    this.listenTo(this.model, "POST", /* your POST callback */);
}

答案 1 :(得分:0)

您可以覆盖save方法来执行任何操作;像这样的东西:

@MyApp.module "Entities", (Entities, App, Backbone, Marionette, $, _) ->

  class Entities.Model extends Backbone.Model

    save: (data, options = {}) ->
      ## do whatever you need to do ##
      super data, options

然后只需从此定义而不是Backbone.Model扩展模型,如下所示:

class Entities.MyModel extends App.Entities.Model