Próbuję dać mojej wtyczce funkcję zwrotną i chciałbym, aby działała w nieco tradycyjny sposób:
myPlugin({options}, function() {
/* code to execute */
});
lub
myPlugin({options}, anotherFunction());
Jak obsłużyć ten parametr w kodzie? Czy jest traktowany jako jeden pełny byt? Jestem prawie pewien, że wiem, gdzie umieścić kod wykonawczy, ale jak mam go wykonać? Wydaje się, że nie mogę znaleźć dużej literatury na ten temat.
()
Odpowiedzi:
Po prostu wykonaj callback we wtyczce:
$.fn.myPlugin = function(options, callback) { if (typeof callback == 'function') { // make sure the callback is a function callback.call(this); // brings the scope to the callback } };
Możesz również mieć wywołanie zwrotne w obiekcie opcji:
$.fn.myPlugin = function() { // extend the options from pre-defined values: var options = $.extend({ callback: function() {} }, arguments[0] || {}); // call the callback and apply the scope: options.callback.call(this); };
Użyj tego w ten sposób:
$('.elem').myPlugin({ callback: function() { // some action } });
źródło
$('.elem').myPlugin({ callback: function (param) { // some action } });
options.callback.call(this, param);
animateBefore
ianimateAfter
. proszę powiedz mi, jak korzystać z twojego rozwiązania?Nie wiem, czy dobrze rozumiem twoje pytanie. Ale w przypadku drugiej wersji: to zadzwoni
anotherFunction
natychmiast.Zasadniczo twoja wtyczka powinna być jakąś funkcją, która wygląda tak:
var myPlugin = function(options, callback) { //do something with options here //call callback if(callback) callback(); }
Musisz podać obiekt funkcji jako wywołanie zwrotne, więc albo
function(){...}
alboanotherFunction
(bez()
).źródło
Przywraca podmuch z przeszłości.
Warto zauważyć, że jeśli masz przekazane dwa argumenty, na przykład:
$.fn.plugin = function(options, callback) { ... };
Następnie wywołujesz wtyczkę bez argumentu opcji, ale z wywołaniem zwrotnym, wtedy napotkasz problemy:
$(selector).plugin(function() {...});
Używam tego, aby uczynić go nieco bardziej elastycznym:
if($.isFunction(options)) { callback = options }
źródło
Myślę, że to może ci pomóc
// Create closure. (function( $ ) { // This is the easiest way to have default options. var settings = $.extend({ // These are the defaults. onready: function(){}, //Rest of the Settings goes here... }, options ); // Plugin definition. $.fn.hilight = function( options ) { //Here's the Callback settings.onready.call(this); //Your plugin code goes Here }; // End of closure. })( jQuery );
Udostępniłem artykuł o tworzeniu własnej wtyczki jQuery. Myślę, że powinieneś sprawdzić, czy http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/
źródło
Zmień funkcję wtyczki, aby przyjmowała drugi parametr. Zakładając, że użytkownik przekazuje funkcję, parametr ten można traktować jako zwykłą funkcję.
Zauważ, że możesz również ustawić wywołanie zwrotne jako właściwość parametru options.
Na przykład:
$.fn.myPlugin = function(options, callback) { ... if(callback) //If the caller supplied a callback callback(someParam); ... });
źródło
Przykład trochę późno, ale może się przydać. Używanie argumentów może stworzyć taką samą funkcjonalność.
$.fn.myPlugin = function() { var el = $(this[0]); var args = arguments[0] || {}; var callBack = arguments[1]; ..... if (typeof callback == 'function') { callback.call(this); } }
źródło