Изменения в API

Общая эволюция архитектуры API

Эволюция API AutoNumeric связана с переходом от императивной модели управления DOM-элементами к более декларативной и инкапсулированной архитектуре. В ранних версиях библиотека опиралась на прямое изменение состояния input-элементов через набор процедурных методов, тогда как современные версии формируют единый экземпляр управления с чётко определённым жизненным циклом.

Ключевым изменением стало разделение ответственности между:

  • инициализацией и привязкой к DOM,
  • управлением внутренним состоянием значения,
  • форматированием и парсингом,
  • внешним API взаимодействия.

Это привело к тому, что большинство глобальных функций было заменено методами экземпляра, а конфигурация стала централизованной структурой.


Изменения модели инициализации

Ранние версии использовали прямой вызов функции с передачей DOM-элемента:

new AutoNumeric(element, options);

В более поздних версиях добавилась строгая типизация экземпляра и расширенная фабричная инициализация:

AutoNumeric.multiple(selector, options);

и

const anElement = AutoNumeric.getAutoNumericElement(element);

Изменился сам смысл инициализации: вместо «применить форматирование к элементу» модель стала трактоваться как «создать контроллер числового поля».

Важные изменения:

  • обязательное создание экземпляра для управления состоянием;
  • отказ от неявной инициализации через data-атрибуты без явного вызова;
  • введение методов повторной инициализации без разрушения DOM.

Конфигурация и её структура

Конфигурационные опции претерпели значительные изменения. В старых версиях присутствовал плоский объект настроек, где параметры часто пересекались по смыслу.

Современная модель перешла к строгой структуре:

const options = {
  digitGroupSeparator: ',',
  decimalCharacter: '.',
  decimalPlaces: 2
};

Изменения затронули следующие аспекты:

1. Переименование параметров

Старое имя Новое имя
aSep digitGroupSeparator
aDec decimalCharacter
vMin / vMax minimumValue / maximumValue

2. Уточнение семантики

  • параметры разделены на форматирование и валидацию;
  • убрана неоднозначность между строковыми и числовыми типами;
  • добавлена строгая типизация значений.

3. Введение групп опций Конфигурация стала логически группироваться:

  • форматирование вывода;
  • ограничения значений;
  • поведение курсора;
  • управление пустыми значениями.

Изменения методов экземпляра

API методов экземпляра стало более унифицированным и предсказуемым.

Основные методы, подвергшиеся изменениям:

  • set() — установка значения
  • getNumber() — получение числового значения
  • getFormatted() — получение форматированной строки
  • clear() — очистка значения
  • upd ate() — обновление конфигурации

Ранее присутствовали менее консистентные методы, например autoNumericSet, autoNumericGet, которые были заменены на единый интерфейс.

Изменение поведения set:

anElement.se t(1234.56);

Ранее метод мог принимать строку и число без строгой обработки типов. В новой модели добавлена предсказуемая нормализация входных данных.

Метод update также изменил семантику: вместо частичного патча конфигурации в некоторых версиях теперь используется контролируемое обновление с перерасчётом внутреннего состояния.


Статические методы и их переработка

Статический API был переработан с целью разделения утилитарных и управляющих функций.

Добавились или были переработаны:

  • AutoNumeric.getAutoNumericElement(element)
  • AutoNumeric.multiple(selector, options)
  • AutoNumeric.isManagedByAutoNumeric(element)
  • AutoNumeric.unformat(value, options)

Изменения заключаются в том, что статические методы больше не выполняют скрытую мутацию DOM. Их роль ограничена:

  • созданием экземпляров,
  • проверкой состояния,
  • конвертацией значений без привязки к DOM.

Изменения в обработке событий

Модель событий была переработана в сторону стандартизации.

Вместо разрозненных callback-опций (например onFocus, onBlur, onChange) введена унифицированная система событий:

  • autoNumeric:initialized
  • autoNumeric:formatted
  • autoNumeric:rawValueModified
  • autoNumeric:destroyed

Изменения:

  • переход от опций-колбэков к DOM CustomEvent;
  • стандартизация структуры payload;
  • отделение логики форматирования от UI-событий.

Пример новой модели:

element.addEventListener('autoNumeric:formatted', (e) => {
  const { formatted, rawValue } = e.detail;
});

Устаревшие методы и удалённые возможности

Ряд функций был исключён или признан устаревшим:

  • глобальные функции AutoNumeric.set, AutoNumeric.get
  • прямое управление через data-атрибуты без инициализации
  • устаревшие алиасы параметров (aSep, aDec)
  • частично автоматическое восстановление состояния без явного destroy

Причины удаления:

  • дублирование функциональности;
  • неоднозначное поведение при множественных экземплярах;
  • сложности интеграции с современными сборщиками модулей.

Изменения жизненного цикла экземпляра

Жизненный цикл стал явным и контролируемым:

  1. создание экземпляра;
  2. привязка к DOM;
  3. управление значением;
  4. обновление конфигурации;
  5. уничтожение экземпляра.

Метод destroy был переработан:

  • удаляет обработчики событий;
  • восстанавливает исходное значение input;
  • очищает внутренние ссылки на DOM.

Миграция между версиями API

При переходе на новые версии API требуется учёт следующих изменений:

1. Замена устаревших опций

// старый стиль
{ aSep: ',', aDec: '.' }

// новый стиль
{ digitGroupSeparator: ',', decimalCharacter: '.' }

2. Переход на экземплярную модель

// старый стиль
AutoNumeric.set(element, 1234);

// новый стиль
const an = new AutoNumeric(element, options);
an.set(1234);

3. Обработка событий через DOM API

// старый стиль
onChange: callback

// новый стиль
element.addEventListener('autoNumeric:rawValueModified', callback);

Изменения в работе с несколькими элементами

Ранее обработка множественных элементов требовала ручного обхода DOM. В новых версиях введён централизованный метод:

AutoNumeric.multiple('.price-input', options);

Изменения:

  • единая точка инициализации;
  • хранение коллекции экземпляров;
  • возможность массового обновления конфигурации;
  • унифицированное уничтожение всех экземпляров.

Влияние изменений на интеграцию с фреймворками

Изменения API затронули интеграции с UI-фреймворками:

  • более строгая модель экземпляров упростила работу с React/Vue/Angular;
  • отказ от глобальных функций устранил конфликты состояний;
  • событийная модель стала совместимой с реактивными системами.

Особенно важным стало разделение:

  • DOM как слой представления;
  • AutoNumeric как слой логики форматирования.

Изменения в модели ошибок и валидации

Ранее ошибки часто обрабатывались через silent-fail или логические возвраты.

В новых версиях:

  • добавлены явные исключения для критических ошибок конфигурации;
  • введена проверка типов при инициализации;
  • улучшена диагностика некорректных значений.

Поведение стало более предсказуемым при:

  • некорректных числовых строках;
  • нарушении ограничений min/max;
  • конфликте формата разделителей.