我无法使backbone.js
的创建功能正常工作。我的主要问题是nextModel
,resp
,xhr
来自哪里?
我认为应该做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
请求成功时要调用的函数。该函数传递了三个参数:
从jQuery 1.5开始,成功设置可以接受一系列功能。每个函数将依次调用。这是一个Ajax事件。这意味着,nextModel
将来自success(data, textStatus, jqXHR)
。
答案 0 :(得分:2)
options
对象以及success
回调传递给Backbone.Model#save
,success
会保存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个参数在那时被传递到它。