将变量传递给回调函数
问题描述:
我想写一个jQuery插件,可以应用于选择器。在这个插件中,有多个调用webservices的地方,需要回调方法。将变量传递给回调函数
我遇到的问题是维护选择器的每个循环中的当前上下文项目。
(function($){
$.fn.myMethod = function(){
return this.each(function(){
var c = $(this);
$.api.methodToCall("", CallbackFunction);
});
};
function CallbackFunction(data, result){
// do stuff based on c
}
})(jQuery);
通常情况下,您需要提供的回调函数直线距离,这让我访问C,但在回调函数,有可能是另一个API调用,所以它开始变得混乱。有没有办法做到这一点?
答
EDITED
肖恩指出,我的第一个版本是有点高于所需的局势更加复杂......
$.api.methodToCall("", function(data, result) {
CallbackFunction(data, result, context);
});
function CallbackFunction(data, result, c) {
// you can access 'c' here...
}
或者,如果你喜欢
$.api.methodToCall("", function(data, result) {
CallbackFunction.call(c, data, result);
});
function CallbackFunction(data, result) {
// you can access 'this' here...
}
答
这是最简单的方法
(function($) {
$.fn.myMethod = function() {
return this.each(function() {
var c = $(this);
$.api.methodToCall("", function() {
// do stuff based on c
});
});
};
})(jQuery);
这里我们将回调函数带入本地范围,因此它可以直接访问c
。
这里不需要立即调用函数,因为没有共享变量进行迭代。 – 2010-05-24 08:28:31
@肖恩金赛:嗯,你说得对,那太复杂了。编辑。为你+1,并保留我的例子来说明回调可以提取到一个单独的函数(为了可读性,说),并仍然有一个参考的背景,我相信这是问题的核心。 – 2010-05-24 09:15:00