2010-05-24 169 views
1

我想写一个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调用,所以它开始变得混乱。有没有办法做到这一点?

回答

1

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... 
} 
+0

这里不需要立即调用函数,因为没有共享变量进行迭代。 – 2010-05-24 08:28:31

+1

@肖恩金赛:嗯,你说得对,那太复杂了。编辑。为你+1,并保留我的例子来说明回调可以提取到一个单独的函数(为了可读性,说),并仍然有一个参考的背景,我相信这是问题的核心。 – 2010-05-24 09:15:00

1

这是最简单的方法

(function($) { 
    $.fn.myMethod = function() { 
     return this.each(function() { 
      var c = $(this); 
      $.api.methodToCall("", function() { 
       // do stuff based on c 
      }); 
     }); 
    }; 
})(jQuery); 

这里我们将回调函数带入本地范围,因此它可以直接访问c