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


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

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

или

myPlugin({options}, anotherFunction());

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

6 80

6 ответов:

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

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

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

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

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

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

возвращая взрыв из прошлого.

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

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

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

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

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

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

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

например:

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

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

    ...
});

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

// 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 );

я поделился статьей о создании собственного плагина jQuery.Я думаю, что вы должны проверить это http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/

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

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