Создаю jQuery-плагин. По инструкции в интернете надо делать так:
$.fn.tooltip = function( method ) {
if ( methods[method] ) {
return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Метод с именем ' + method + ' не существует для jQuery.tooltip' );
}
};
Я изменил код так:
$.fn.tooltip = function( method ) {
var options = $.extend( {
'location' : 'top'
}, arguments[1]?arguments[1]:arguments[0]);
// логика вызова метода
if ( methods[method] ) {
methods.init.apply( this, [options] );
var $this = this;
this.each(function () {
return methods[method].apply( $this, [options] );
});
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, [options] );
} else {
$.error( 'Метод с именем ' + method + ' не существует для jQuery.tooltip' );
}
return this;
};
Сам метод init такой:
var methods = {
init : function( options ) {
return this.each(function(){
var $this = $(this);
var data = $this.data();
// Если плагин ещё не проинициализирован
if ( jQuery.isEmptyObject(data) ) {
console.log('method init');
/*
* Тут выполняем инициализацию
*/
$.each(options, function (index, value) {
$this.data(index, value);
});
}
});
},
show : function( options ) {
console.log('method show');
console.log($(this).data());
}
};
Т.е., если плагин для объекта вызывается впервые, неважно какой метод плагина вызывается, сначала происходит его init()
.
Если же инициализация для объекта уже была произведена, то она пропускается.
Только вот зачем здесь инициализация, что в ней делать нужно? Я в ней записываю все данные в data()
объекта.
А значит, в остальных методах плагина, например в show()
, я должен брать данные из хранилища data()
, а не из передаваемых аргументов arguments
.
Но если я вызову плагин для объекта во второй раз с новыми параметрами, то во второй раз init()
не выполнится, а значит в data()
останутся старые данные, которые были присвоены при первом вызове.
Отсюда следует, что данные из data()
брать неправильно, а вместо этого нужно пользоваться просто arguments
, которые мы передаём всякий раз при
вызове плагина.
Но тогда зачем нам метод init()
?
Есть нижеприведённый кодКод пытается сделать класс для создания обработчиков React-компонента
Здравствуйте! проблема такая как передать значение чекбокса если это значение с пробелом :
В каких случаях используется FormData ( const formData = new FormData();) при отправке данных с формы POST запросомможно просто же отправить в body данные с формы