我将以下方法添加到对象中:
loadAPIServiceData : function(service, format, term, callback) {
return $.when($.ajax({
url: service + ((term) ? term : '') + '?format=' + format
})).done(function(result) {
return callback.apply(result, [ result ]);
});
},
当我加载数据时,回调函数会传递一个我需要进一步向下的参数(result
显然得到了我从AJAX调用中得到的任何东西)。我需要的是能够在调用时向回调函数添加更多参数,并且在那里仍然有result
:)
为了更加明确这一点,当我说“我需要的是能够在调用回调函数时添加更多参数,并且仍然具有result
时,这就是我的意思。那里“:
var test = loadAPIServiceData('some_service', 'json', 'some_term', function(result, another_parameter, ...) {
});
答案 0 :(得分:1)
您可以使用bind申请参数,而无需修改loadAPIServiceData
:
function myCallback(arg1, arg2, result) {
//
}
loadAPIServiceData(service, format, term, myCallback.bind(this, arg1, arg2));
如果您希望将result
保留在第一个arg位置,则此代码会使用arguments object将所有其他参数发送给回调:
loadAPIServiceData : function(service, format, term, callback) {
var add_args = Array.prototype.slice.call(arguments, 4);
return $.when($.ajax({
url: service + ((term) ? term : '') + '?format=' + format
})).done(function(result) {
return callback.apply(this, result, [ result].concat(add_args));
});
},
function myCallback(result, arg1, arg2) {
//
}
loadAPIServiceData(service, format, term, myCallback, "arg1", "arg2");
答案 1 :(得分:0)
不确定我是否正确理解了您的问题,但这是否有意义?
function addOptionalParams(result) {
var params = [];
params.push(result);
// do logic to decide if you need more params
// if you need more params, push them to the params array
if(weNeedMoreParams) {
params.push('foo');
params.push('bar');
}
return params;
}
loadAPIServiceData : function(service, format, term, callback) {
return $.when($.ajax({
url: service + ((term) ? term : '') + '?format=' + format
})).done(function(result) {
var callbackArgs = addOptionalParams(result);
return callback.apply(this, callbackArgs);
});
},
这是'done'函数,它决定了它将使用。
调用回调的参数