При замене jQuery или других библиотек на Umbrella JS часто возникает проблема несовместимости синтаксиса. Umbrella использует собственный API для выбора элементов и манипуляций с ними, который во многом похож на jQuery, но имеет ключевые отличия:
.each(), .map(),
.filter() работают только с экземплярами u() и
не поддерживают прямой перебор массивов DOM-элементов, как это делает
jQuery.Пример:
// jQuery
$('div').each(function(index, el) {
console.log(el);
});
// Umbrella JS
u('div').each((el, index) => {
console.log(el);
});
Обратить внимание на порядок аргументов: в Umbrella сначала элемент, потом индекс, что может сломать существующую логику.
Umbrella JS предлагает компактные методы .addClass(),
.removeClass(), .toggleClass(),
.attr(), .removeAttr(). Основные подводные
камни:
.attr() возвращает значение первого
элемента, а не массив значений всех элементов. Это отличается
от jQuery, где методы работают с набором элементов более гибко.Пример:
u('.item').addClass('active'); // добавляет класс всем элементам
let attr = u('.item').attr('data-id'); // вернет только первый
Umbrella JS поддерживает .on() и .off() для
событий, но есть ограничения:
.on('click', 'selector', handler), а в
Umbrella приходится вручную фильтровать цели события..trigger() для имитации событий могут не
поддерживать все стандартные события, особенно специфические
пользовательские.Пример делегирования:
// jQuery
$(document).on('click', '.button', function() { ... });
// Umbrella JS
u(document).on('click', (event) => {
if (event.target.matches('.button')) {
// обработка
}
});
Umbrella JS не содержит встроенных эффектов типа
.fadeIn(), .slideUp(),
.animate(). При миграции кода, использующего
jQuery-анимации, возникает необходимость:
Это часто вызывает замедление процесса миграции, так как приходится менять архитектуру кода, а не просто заменять вызовы методов.
Методы .load(), .get(),
.post() из jQuery отсутствуют. Umbrella JS предоставляет
только .ajax(), которая:
u().ajax({ url, method, data, success, error }).Пример:
u().ajax({
url: '/api/data',
method: 'GET',
success: function(response) {
console.log(response);
},
error: function(err) {
console.error(err);
}
});
При миграции нужно переписывать старые вызовы .get() и
.post() под новый формат.
Методы .append(), .prepend(),
.before(), .after(), .remove() в
Umbrella работают корректно, но есть нюансы:
.remove() удаляет элементы, но не освобождает
автоматически связанные события или данные, что может приводить к
утечкам памяти, если были подписки на события.Одной из частых ошибок при миграции является попытка напрямую скопировать цепочки jQuery:
// jQuery
$('div').addClass('active').fadeIn().attr('data-id', '123');
// Umbrella JS
u('div').addClass('active').attr('data-id', '123'); // .fadeIn() нет
Любые методы, которых нет в Umbrella, требуют замены на CSS-анимацию или отдельные функции. При больших проектах это требует планирования структуры кода и модульности.
u(). Частое использование в циклах может быть менее
эффективно, чем прямой доступ к DOM..map() или .filter().NodeList и Element не поддерживаются Umbrella,
что иногда ломает сторонние плагины.Правильное понимание этих различий позволяет избежать ошибок при переходе с jQuery и других библиотек, минимизируя риск поломки существующей функциональности.