有人能解释一下这个代码是如何工作的吗

Can someone explain how this code works?

本文关键字:何工作 工作 代码 能解释 一下      更新时间:2023-09-26

我很难让backbone.js的创建函数工作。我的主要问题是,nextModelrespxhr来自哪里?我认为它应该做coll.add(model)(因为我们正试图向集合中添加一个模型(。

谢谢。

create : function(model, options) {
    var coll = this;
    options || (options = {});
    model = this._prepareModel(model, options);
    if (!model) return false;
    var success = options.success;
    options.success = function(nextModel, resp, xhr) {
        coll.add(nextModel, options);
        if (success) success(nextModel, resp, xhr);
    };
    model.save(null, options);
    return model;
},

更新:这是我从谢萨克那里得到的线索。我追踪了它,从创建到保存,再到Backbone.sync。最后的options.success将与Jquery 中的内容相对应

success(data, textStatus, jqXHR)Function, Array

如果请求成功,将调用的函数。该函数传递了三个参数:

  • 从服务器返回的数据,根据dataType参数进行格式化
  • 描述状态的字符串
  • 以及jqXHR(在jQuery 1.4.x中,XMLHttpRequest(对象

从jQuery 1.5开始,成功设置可以接受一系列函数。每个函数将依次调用。这是一个Ajax事件。这意味着nextModel将来自success(data, textStatus, jqXHR)的数据。

options对象和success回调被传递给Backbone.Model#save,后者保存success回调的副本,用自己的回调覆盖它,并调用Backbone.sync,后者最终用整个options对象调用$.ajax。它的jQuery(或Zepto(代码最终使用来自服务器的JSON响应调用(重写的(options.success

被覆盖的成功回调set()是来自模型上服务器的响应(服务器在保存模型后,可以返回模型的整个模型,也可以只返回JSON格式的一些属性。这样做是为了允许服务器在保存时修改或规范化模型[如添加新创建的ID](,并将改变的模型(该改变的模型被称为nextModel(传递回原始success回调(在Backbone.Collection#create中定义的回调(的保存副本,这将nextModel(从Backbone.Model#save传递,在被来自服务器的JSON响应修改之后(添加到集合。


如果您只想将模型添加到集合中,而不想由服务器将其保存在持久存储中,请直接调用Backbone.Collection#add,而不是创建。

function(nextModel, resp, xhr)

是一个匿名函数,当执行成功时会调用它,参数netModel、resp、xhr会传递给它。

所以在模型的某个地方有一个方法可以调用函数

options.success(nextMode, resp, xhr)

并且这些变量在模型中定义

您所引用的变量nextModel, resp, xhr是函数的参数。该函数被创建并分配给options.success

就在代码中的这一点之后,整个options对象被传递到model.save中,我想在那里会发生更多的处理,也许会调用options.success函数,并且在这一点上会向其中传递3个参数。