我有一个骨干集合,使用save mixin进行批量保存(只是一种实用方法,因为骨干本身不支持批量保存)
// Cars collection
define([
'Car',
'BulkSave'
], function(Car, BulkSave) {
return Backbone.Collection.extend({
model: Car,
save: function() {
var options = {
...
onSuccess: function(cars) {
// do something with cars
console.log(cars);
}
...
};
this.bulkSave(options);
}
}).mixin(BulkSave);
});
// BulkSave Mixin definition
define([], function(){
return {
save: function(options){
var thisCollection = this;
$.ajax({
type: options.type,
url: options.url,
dataType: 'json',
contentType: 'application/json',
data: JSON.stringify(options.data),
success: function(data) {
// data would give me the list of cars
// that changed
options.onSuccess.apply(thisCollection, arguments);
}
});
}
};
});
因此,当我想要对该集合进行批量保存时,我会调用
cars.save();
我在这里的问题是在success
方法的ajax
回调中,我将调用我将在其中传递的options对象中的onSuccess
方法。参数。
之间有什么不同
options.onSuccess(arguments);
// this logs an arrayList of 3 properties
// [0] -- the actual list of cars which changed
// [1] -- 'success'
// [2] -- the xhr object
vs
options.onSuccess(thisCollection, arguments);
// When i do this instead
// it logs
// the list of cars that changed instead
有人可以解释两种情景之间的区别吗?
答案 0 :(得分:3)
在第一个示例中,您只需将arguments对象传递给该函数。
在第二个中,您使用apply调用该函数。简而言之,apply函数使用" spread"来调用函数。参数。这意味着你的函数被调用就像你的函数(arg0 / *,其中arg是来自参数* /,arg1,argN,...的单个元素),给定"这个"。有关更多信息,请参阅我指出的页面。