有人可以解释这个代码的工作原理吗?
我很难获得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;
},
UPDATE: 这是我学到以下从shesak线索。我追踪了它,从创建到保存,然后到Backbone.sync。 Jquery中的options.success将对应于此。
success(data, textStatus, jqXHR)Function, Array
如果请求成功,则调用该函数。根据dataType参数
- 数据从服务器返回的,格式化:这个函数会得到三个参数。
从jQuery 1.5开始,成功设置可以接受一组函数。每个函数都会依次调用。这是一个Ajax事件。这意味着,nextModel
将来自success(data, textStatus, jqXHR)
的数据。
的options
对象,与success
回调一起,被传递到Backbone.Model#save
,节省了success
回调的副本,与它自己的回调覆盖它并调用Backbone.sync
,最终调用$.ajax
与整个options
对象。它的jQuery(或Zepto's)代码最终调用(覆盖的)options.success
以及来自服务器的JSON响应。
重载的成功回调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)
和这些变量模型
您的答案和@ctcherry的答案都不涉及这个问题;检查代码,'nextModel'只存在于这个函数中,并没有在其他地方定义。它在哪里分配,为什么被使用? – eykanal
我对整个Backbone.js进行了搜索... nextModel只出现在这里。它从哪里来的? –
nextModel是参数的名称,所以它可以在模型“x”或“j”或“xxx”或其他任何地方被调用。 –
您参考的变量nextModel, resp, xhr
到的参数的函数定义。在代码点之后就被创建functuon并分配给options.success
,整个options
对象被传递到model.save
,我想象一些处理发生,也许这options.success
函数被调用,并且3个参数传递到它在那一点上。
不完全。调用成功回调函数的代码是'Backbone.Model#save',它通过一个'Backbone.Model'对象加载提供给'Backbone.Collection#create'的数据,并与来自服务器的JSON响应合并,而不是实际的AJAX响应。 – shesek
@ Shesek,所以它添加我给它的模型集合或添加从服务器响应该集合的模型。 –
@ Shesek,到目前为止,我在SAVE的options.success中收到了服务器的响应,并且我可以警告响应。然而,“成功”状态并没有转移回CREATE,所以它的成功功能没有被调用。 –