Интеграция публичных методов и обратных вызовов
Добавляйте в плагины публичные методы для внешнего взаимодействия и используйте функции обратного вызова, чтобы пользователи могли подключаться к определённым событиям плагина.
«Интеграция публичных методов и обратных вызовов» — бесплатный урок jQuery Academy на CoddyKit. Это урок 3 из 3. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения jQuery Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс jQuery Academy содержит 3 уроков всего.
Взаимодействие с плагинами
Отличные плагины не ограничиваются автономной работой. Они позволяют пользователям взаимодействовать с ними после инициализации! На этом уроке Вы узнаете, как добавлять открытые методы для внешнего управления и функции обратного вызова для пользовательских реакций.
- Открытые методы: Функции, которые пользователи могут вызывать у инициализированного экземпляра плагина.
- Обратные вызовы: Функции, запускающиеся при наступлении определённых событий внутри плагина.
Повторение основ плагинов
Вспомним, что плагины jQuery часто заключают в немедленно вызываемое функциональное выражение (IIFE), чтобы предотвратить загрязнение глобальной области. Такая структура создаёт безопасное место для логики плагина и его внутренних переменных.
Мы продолжим использовать этот знакомый шаблон.
(function($) {
$.fn.myPlugin = function(options) {
// Default settings
var settings = $.extend({}, $.fn.myPlugin.defaults, options);
return this.each(function() {
var $this = $(this); // The element the plugin is applied to
// Plugin logic goes here
console.log("Plugin initialized on: " + $this.attr('id'));
});
};
// Default options
$.fn.myPlugin.defaults = {
message: "Hello from plugin!"
};
})(jQuery);
// How to use (in HTML <div id="myElement"></div>):
// $('#myElement').myPlugin();Что такое открытые методы?
Открытый метод — это функция, предоставляемая плагином, которую можно вызвать извне его внутренней области даже после инициализации плагина для элемента.
Представьте, что это пульт управления плагином. Вы можете дать ему команды вроде «сбросить», «обновить» или «получить значение».
Реализация открытого метода
Чтобы добавить открытые методы, обычно сохраняют данные экземпляра плагина, включая его методы, непосредственно в DOM-элементе с помощью метода jQuery .data().
Давайте создадим простой плагин «счётчик» и добавим метод getValue.
(function($) {
$.fn.counterPlugin = function(options) {
var settings = $.extend({
initialValue: 0
}, options);
return this.each(function() {
var $this = $(this);
var value = settings.initialValue;
var methods = {
getValue: function() {
return value;
},
increment: function() {
value++;
$this.text(value); // Update display
},
init: function() {
$this.text(value); // Initial display
}
};
// Store methods on the element's data
$this.data('counterPlugin', methods);
methods.init(); // Initialize display
});
};
})(jQuery);
// HTML: <div id="myCounter"></div>
// Usage: $('#myCounter').counterPlugin();
// Later: $('#myCounter').data('counterPlugin').getValue();Вызов открытых методов
После инициализации плагина и сохранения его методов с помощью .data() Вы можете обращаться к ним и вызывать их напрямую.
Сначала нужно получить сохранённый экземпляр из элемента, а затем вызвать метод у этого экземпляра.
// Assume counterPlugin from previous scene is loaded
// HTML: <div id="myCounter"></div>
$(document).ready(function() {
// Initialize the plugin
$('#myCounter').counterPlugin({ initialValue: 5 });
// Get the plugin instance
var counterInstance = $('#myCounter').data('counterPlugin');
// Call public methods
console.log("Current value: " + counterInstance.getValue());
counterInstance.increment();
console.log("After increment: " + counterInstance.getValue());
});Что такое обратные вызовы?
Функции обратного вызова — это функции, которые Вы передаёте плагину, а плагин выполняет их в определённые моменты своего жизненного цикла или при возникновении внутренних событий.
Они позволяют пользователям «подключаться» к поведению плагина и добавлять собственную логику, не изменяя исходный код плагина.
- Представляйте их как обработчики событий для внутренних действий плагина.
- Распространённые обратные вызовы:
onInit,onChange,onComplete.
Реализация обратного вызова
Чтобы реализовать обратный вызов, сначала определите его в параметрах плагина по умолчанию. Затем внутри плагина просто вызовите эту функцию при наступлении соответствующего события, передав все необходимые данные.
Давайте расширим наш плагин-счётчик с помощью обратного вызова onChange.
(function($) {
$.fn.counterPlugin = function(options) {
var settings = $.extend({
initialValue: 0,
onChange: function(newValue) {} // Default empty callback
}, options);
return this.each(function() {
var $this = $(this);
var value = settings.initialValue;
var methods = {
getValue: function() {
return value;
},
increment: function() {
value++;
$this.text(value);
// Call the callback when value changes
settings.onChange.call($this[0], value);
},
init: function() {
$this.text(value);
}
};
$this.data('counterPlugin', methods);
methods.init();
});
};
})(jQuery);
// Usage: See next scene!Передача функций обратного вызова
Пользователи передают собственные функции обратного вызова непосредственно в объекте параметров плагина при инициализации. Затем плагин вызовет эти функции в нужный момент.
Обратите внимание, как используется .call($this[0], value). Это устанавливает this внутри обратного вызова в DOM-элемент и передаёт новое значение в качестве аргумента.
// Assume counterPlugin with onChange callback is loaded
// HTML: <div id="myCounter"></div>
$(document).ready(function() {
$('#myCounter').counterPlugin({
initialValue: 10,
onChange: function(newValue) {
console.log("Counter changed to: " + newValue + " on element: " + this.id);
if (newValue % 2 === 0) {
$(this).css('color', 'blue');
} else {
$(this).css('color', 'red');
}
}
});
var counterInstance = $('#myCounter').data('counterPlugin');
counterInstance.increment(); // Triggers callback
counterInstance.increment(); // Triggers callback
});Несколько методов и обратных вызовов
Вы можете определить несколько открытых методов и несколько разных обратных вызовов для обработки различных событий внутри плагина. Это создаёт гибкий и мощный компонент.
- Открытые методы позволяют пользователям управлять плагином.
- Обратные вызовы позволяют плагину сообщать коду пользователя о происходящих событиях.
(function($) {
$.fn.advancedCounter = function(options) {
var settings = $.extend({
initial: 0,
onIncrement: null, // New callback
onDecrement: null, // New callback
onReset: null // New callback
}, options);
return this.each(function() {
var $this = $(this);
var value = settings.initial;
var methods = {
getValue: function() { return value; },
increment: function() {
value++;
$this.text(value);
if ($.isFunction(settings.onIncrement)) {
settings.onIncrement.call($this[0], value);
}
},
decrement: function() {
value--;
$this.text(value);
if ($.isFunction(settings.onDecrement)) {
settings.onDecrement.call($this[0], value);
}
},
reset: function() {
value = settings.initial;
$this.text(value);
if ($.isFunction(settings.onReset)) {
settings.onReset.call($this[0], value);
}
},
init: function() { $this.text(value); }
};
$this.data('advancedCounter', methods);
methods.init();
});
};
})(jQuery);
// HTML: <div id="myAdvancedCounter"></div>
$(document).ready(function() {
$('#myAdvancedCounter').advancedCounter({
initial: 100,
onIncrement: function(v) { console.log("Inc: " + v); },
onReset: function(v) { console.log("Reset to: " + v); }
});
var inst = $('#myAdvancedCounter').data('advancedCounter');
inst.increment();
inst.reset();
});Советы по открытым методам и обратным вызовам
При проектировании открытого интерфейса плагина помните о следующих советах:
- Единообразные имена: Используйте понятные и описательные имена методов и обратных вызовов.
- Обработка ошибок: Перед вызовом проверяйте, действительно ли обратные вызовы являются функциями (например,
$.isFunction(settings.onComplete)). - Контекст: Используйте
.call()или.apply(), чтобы задать контекстthisдля обратных вызовов, обычно установив его в элемент, к которому применяется плагин. - Аргументы: Передавайте обратным вызовам относящиеся к делу данные (например, новое значение или объект события).
Викторина о взаимодействии с плагинами
Рассмотрим плагин jQuery, инициализированный для #myElement. У плагина есть открытый метод doSomething() и обратный вызов onComplete.
Какой фрагмент кода правильно вызывает открытый метод И передаёт пользовательский обратный вызов при инициализации?
Итоги и следующие шаги
Вы научились делать плагины jQuery по-настоящему интерактивными и гибкими!
- Открытые методы позволяют внешнему коду управлять плагином и получать сведения о нём после его инициализации.
- Обратные вызовы предоставляют пользователям точки подключения для добавления собственной логики и реакции на внутренние события плагина.
Эти приёмы необходимы для создания надёжных, повторно используемых и удобных для пользователей плагинов jQuery.
Часто задаваемые вопросы
Урок «Интеграция публичных методов и обратных вызовов» бесплатный?
Да — полный текст урока «Интеграция публичных методов и обратных вызовов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс jQuery Academy, подпишись на CoddyKit PRO. Курс jQuery Academy содержит 3 уроков всего.
Чему я научусь в уроке «Интеграция публичных методов и обратных вызовов»?
Добавляйте в плагины публичные методы для внешнего взаимодействия и используйте функции обратного вызова, чтобы пользователи могли подключаться к определённым событиям плагина. Ты практикуешь jQuery Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать jQuery Academy?
Предыдущий опыт не требуется. jQuery Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 3.
Сколько времени занимает урок «Интеграция публичных методов и обратных вызовов»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке jQuery Academy?
Да. Каждый урок jQuery Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Шаблоны проектирования плагинов и области видимости
- Создание настраиваемых и повторно используемых плагинов
- Интеграция публичных методов и обратных вызовов