有人能解释一下这个代码是如何工作的吗
Can someone explain how this code works?
我很难让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;
},
更新:这是我从谢萨克那里得到的线索。我追踪了它,从创建到保存,再到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个参数。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- 在JavaScript中的类中,push和concat的工作方式有何不同