2010-05-24 167 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