Если мы рассмотрим общие сценарии, в которых может быть выбрано это исключение, доступ к свойствам с объектом вверху.
Пример:
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
Просто выполните обратный вызов в плагине:
$.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
}
});
Пример бит поздний, но он может быть полезен. Использование аргументов может создать ту же функциональность.
$.fn.myPlugin = function() {
var el = $(this[0]);
var args = arguments[0] || {};
var callBack = arguments[1];
.....
if (typeof callback == 'function') {
callback.call(this);
}
}
Не знаю, правильно ли я понимаю ваш вопрос. Но для второй версии: Это немедленно вызовет 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 }
Я думаю, что это может помочь вам
// 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/
Измените свою функцию плагина, чтобы взять второй параметр. Предполагая, что пользователь передает функцию, этот параметр можно рассматривать как обычную функцию. Обратите внимание, что вы также можете сделать обратный вызов свойством параметра options.
Например:
$.fn.myPlugin = function(options, callback) {
...
if(callback) //If the caller supplied a callback
callback(someParam);
...
});
$('.elem').myPlugin({ callback: function (param) { // some action } });
– Jeaf Gilbert 15 July 2012 в 05:48options.callback('the param');
– Jeaf Gilbert 15 July 2012 в 06:03options.callback.call(this, param);
– David 16 July 2012 в 12:25animateBefore
иanimateAfter
. скажите, пожалуйста, как использовать ваше решение? – user007 13 May 2013 в 11:49