Пользовательский обратный вызов jQuery для плагина [дубликат]

Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.

Пример:

string postalcode=Customer.Address.PostalCode; 
//if customer or address is null , this will through exeption

здесь, если адрес имеет значение null, то вы получите NullReferenceException.

Итак, в качестве практики мы всегда должны использовать проверку нуля, прежде чем обращаться к свойствам в таких объектах (особенно в общих)

string postalcode=Customer?.Address?.PostalCode;
//if customer or address is null , this will return null, without through a exception
80
задан dclowd9901 28 March 2010 в 21:33
поделиться

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

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

$.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
    }
});
159
ответ дан David 25 August 2018 в 20:17
поделиться
  • 1
    Просто добавьте этот ответ. Есть сообщение, которое объясняет это: jquery-howto.blogspot.com/2009/11/… – RaphaelDDL 13 December 2011 в 15:24
  • 2
    @David Как добавить параметр обратного вызова, я хочу сделать это $('.elem').myPlugin({ callback: function (param) { // some action } }); – Jeaf Gilbert 15 July 2012 в 05:48
  • 3
    Nvm, я нашел, что это работает options.callback('the param'); – Jeaf Gilbert 15 July 2012 в 06:03
  • 4
    @JeaffreyGilbert Вы должны принести контекст jQuery, я бы сделал options.callback.call(this, param); – David 16 July 2012 в 12:25
  • 5
    @David Я хочу два обратных вызова, называемых animateBefore и animateAfter. скажите, пожалуйста, как использовать ваше решение? – user007 13 May 2013 в 11:49

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

$.fn.myPlugin = function() {
    var el = $(this[0]);
    var args = arguments[0] || {};
    var callBack = arguments[1];
    .....
    if (typeof callback == 'function') {
        callback.call(this);
    }
}
0
ответ дан Draka 25 August 2018 в 20:17
поделиться

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

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

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

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

5
ответ дан Felix Kling 25 August 2018 в 20:17
поделиться

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

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

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

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

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

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

if($.isFunction(options)) { callback = options }
4
ответ дан Sam Potts 25 August 2018 в 20:17
поделиться

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

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

1
ответ дан Shubham Kumar 25 August 2018 в 20:17
поделиться

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

Например:

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

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

    ...
});
1
ответ дан SLaks 25 August 2018 в 20:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: