有人可以解释这段代码的工作原理吗

时间:2011-08-17 18:59:26

标签: javascript backbone.js

我无法使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;
},

更新: 这是我从shesak的线索中学到的。我跟踪它,从Create到Save再到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)

的数据

3 个答案:

答案 0 :(得分:2)

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

重写成功回调nextModel是服务器对模型的响应(服务器在保存模型后,可以返回它的整个模型或只返回JSON格式的一些属性。这是完成以允许服务器在保存模型时修改或规范化模型[如添加新创建的ID]),并将更改的模型(更改后的模型称为success)传递回保存的副本原始Backbone.Collection#create回调(在nextModel中定义的回调),它添加Backbone.Model#save(从Backbone.Collection#add传递,在被服务器的JSON响应修改后)收集。


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

答案 1 :(得分:0)

function(nextModel, resp, xhr)

是匿名函数,将在执行成功时调用,并将参数netModel,resp,xhr传递给它。

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

options.success(nextMode, resp, xhr)

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

答案 2 :(得分:0)

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

在代码中的那一点之后,整个options对象被传递到model.save,在那里我想到了更多的处理,也许调用了options.success函数,并且有3个参数在那时被传递到它。