Плагин jQuery: добавление функций обратного вызова

Я пытаюсь предоставить функциональность обратного вызова плагина, и я бы хотел, чтобы он работал несколько традиционным способом:

myPlugin({options}, function() {
    /* code to execute */
});

или

myPlugin({options}, anotherFunction());

Как мне обрабатывать этот параметр в коде? Рассматривается ли он как один полный объект? Я уверен, что знаю, где бы я разместил исполняемый код, но как мне получить код для выполнения? Я не могу найти много литературы по этой теме, поэтому заблаговременно за вашу помощь.

Ответ 1

Просто выполните обратный вызов в плагине:

$.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
    }
};

Вы также можете иметь обратный вызов в объекте options:

$.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);

};

Используйте его следующим образом:

$('.elem').myPlugin({
    callback: function() {
        // some action
    }
});

Ответ 2

Я не знаю, правильно ли понимаю ваш вопрос. Но для второй версии: это вызовет anotherFunction сразу.

В принципе, ваш плагин должен быть какой-то функцией, которая выглядит так:

var myPlugin = function(options, callback) {
    //do something with options here
    //call callback
    if(callback) callback();
} 

Вы должны предоставить функцию object как обратный вызов, поэтому либо function(){...}, либо anotherFunction (без ()).

Ответ 3

Возвращение назад из прошлого.

Стоит отметить, что если у вас есть два аргумента, например:

$.fn.plugin = function(options, callback) { ... };

Затем вы вызываете плагин без аргумента options, но с обратным вызовом, тогда вы столкнетесь с проблемами:

$(selector).plugin(function() {...});

Я использую это, чтобы сделать его немного более гибким:

if($.isFunction(options)) { callback = options }

Ответ 4

Измените свою функцию плагина, чтобы взять второй параметр. Предполагая, что пользователь передает функцию, этот параметр можно рассматривать как обычную функцию.
Обратите внимание, что вы также можете сделать обратный вызов свойством параметра options.

Например:

$.fn.myPlugin = function(options, callback) {
    ...

    if(callback)        //If the caller supplied a callback
        callback(someParam);

    ...
});

Ответ 5

Я думаю, это может помочь вам

// 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 the Callback
        settings.onready.call(this);
 
        //Your plugin code goes Here
    };
  
// End of closure.
  
})( jQuery );

Ответ 6

Пример бит поздний, но он может быть полезен. Использование аргументов может создать те же функции.

$.fn.myPlugin = function() {
    var el = $(this[0]);
    var args = arguments[0] || {};
    var callBack = arguments[1];
    .....
    if (typeof callback == 'function') {
        callback.call(this);
    }
}