2013-11-26 54 views
0

我想嘗試調用我的插件外部的函數,該函數是通過插件的「選​​項」傳遞的。該函數可以被調用,但我的代碼無法傳遞在我的插件中定義的參數。調用外部插件並傳遞參數的自定義函數

如何將這些參數從內部傳遞給公共範圍?


$(document).myPlugin({ 
    afterDone : function(){testingCall()} 
}); 

function testingCall(){ 
    alert(arguments[0]); 
    alert(arguments[1]); 
} 

(function($){ 

var MyPlugin = function(element, options){ 
    var settings = $.extend({}, $.fn.myPlugin, options||{}); 
    /* ------ Do somthing, whatever -----*/ 

    //call the custom function here 
    settings.afterDone('para01','para02'); 

}; 

$.fn.myPlugin = function(options){ 
    return this.each(function(key, value){ 
     new MyPlugin(this, options); 
    }); 
}; 

$.fn.myPlugin.defaults = { 
    afterDone : function(){} 
}; 

})(jQuery); 

回答

0

只要改變:

$(document).myPlugin({ 
    afterDone : function(){testingCall()} 
}); 

到:

$(document).myPlugin({ 
    afterDone: function() { 
     testingCall.apply(null, arguments); 
    } 
}); 

這將調用testingCall並傳入或原來的參數列表被傳遞給afterDone。我通過了null作爲apply的第一個參數,因爲我不確定您想要爲this使用哪種上下文。

小提琴:http://jsfiddle.net/TGG2J/

UPDATE

如果你的插件的用戶事先不知道他們要在這些參數傳遞給testingCall他們將有你默認添加到afterDone參數和定義afterDone這樣的:

$(document).myPlugin({ 
    afterDone: function() { 
     var userArgs = ['user01', 'user02'], 
      i = 0; 
     for (i = 0; i < arguments.length; i += 1) { 
      // to make your arguments the first arguments, do this 
      userArgs.splice(0 + i, 0, arguments[i]); 
      // to make the user's arguments the first arguments, do this 
      //userArgs.push(arguments[i]); 
     } 
     testingCall.apply(null, userArgs); 
    } 
}); 

小提琴:http://jsfiddle.net/TGG2J/1/

但這可能會讓人困惑,特別是對於新的Java腳本。它可能會更有意義,讓用戶知道(在文檔)說,你是預先提供兩個參數afterDone,以便他們可以自行決定使用它們:

$(document).myPlugin({ 
    afterDone: function (p1, p2) { 
     testingCall(p1, p2, 'myArgs'); 
    } 
}); 

小提琴:http://jsfiddle.net/TGG2J/2/

雖然(據我所知)沒有什麼可以通過線編輯什麼方法可以:

settings.afterDone('para01','para02'); 

指定文件中的參數仍允許使用它們的用戶。

+0

謝謝。但爲了使插件的用戶更簡單,可以通過編輯「settings.afterDone('para01','para02');」 ? –

相關問題