Метод update

Метод update в библиотеке AutoNumeric предназначен для динамического изменения конфигурации уже инициализированного экземпляра без его пересоздания. Это один из ключевых механизмов адаптации поведения числового поля «на лету», когда требования к форматированию меняются в зависимости от состояния интерфейса, пользовательских действий или бизнес-логики приложения.

Поддержка обновления параметров без разрушения инстанса позволяет сохранять текущее значение, привязки событий и состояние DOM-элемента, одновременно применяя новые правила форматирования: разделители тысяч, символ валюты, точность, ограничения ввода и прочие параметры.

Метод update используется для:

  • изменения формата отображения числа (разделители, префиксы, суффиксы);
  • корректировки ограничений ввода (min, max);
  • изменения точности (decimal places);
  • переключения режимов поведения (например, отрицательные числа, округление);
  • обновления визуального представления без потери текущего значения;
  • адаптации поля под новые условия интерфейса.

Ключевая особенность заключается в том, что обновление происходит без повторной инициализации AutoNumeric и без замены DOM-элемента.

Синтаксис

Базовая форма вызова метода выглядит следующим образом:

anElement.update(newOptions);

Где:

  • anElement — экземпляр AutoNumeric, полученный при инициализации;
  • newOptions — объект конфигурации с параметрами, которые необходимо изменить.

Метод не требует обязательного полного набора настроек. Передаются только те параметры, которые должны быть обновлены.

Механика работы метода

При вызове update происходит последовательная внутренняя обработка:

  1. Слияние текущей конфигурации с переданными параметрами.
  2. Пересчёт форматирования текущего значения.
  3. Обновление отображения в input-элементе.
  4. Сохранение числового raw-значения без изменений (если не затронуто правилами).
  5. Перепривязка некоторых внутренних механизмов (если затронуты события или ограничения).

Важно, что AutoNumeric старается сохранить исходное числовое значение, а не строковое представление.

Параметры обновления

Объект newOptions может включать любые поддерживаемые параметры AutoNumeric. Наиболее часто изменяются следующие группы настроек:

Формат отображения

  • digitGroupSeparator — символ разделения групп разрядов;
  • decimalCharacter — символ десятичного разделителя;
  • currencySymbol — символ валюты;
  • currencySymbolPlacement — позиция символа валюты;
  • suffixText, prefixText — текстовые дополнения.

Изменение этих параметров мгновенно перестраивает отображение значения.

Ограничения ввода

  • minimumValue — минимально допустимое значение;
  • maximumValue — максимально допустимое значение;
  • allowDecimalPadding — выравнивание десятичных знаков;
  • decimalPlaces — количество знаков после запятой.

После обновления этих параметров ввод пользователя начинает валидироваться по новым правилам.

Поведение и режимы

  • leadingZero — поведение ведущих нулей;
  • modifyValueOnWheel — изменение значения колесом мыши;
  • unformatOnSubmit — снятие форматирования при отправке формы;
  • emptyInputBehavior — поведение при пустом значении.

Эти параметры влияют на взаимодействие пользователя с полем, а не только на отображение.

Пример базового использования

const anElement = new AutoNumeric('#price', {
    currencySymbol: '$',
    decimalPlaces: 2,
    digitGroupSeparator: ','
});

// Позднее обновление конфигурации
anElement.update({
    currencySymbol: '€',
    digitGroupSeparator: ' ',
    decimalPlaces: 0
});

В результате поле мгновенно изменит формат отображения без потери введённого значения.

Обновление ограничений диапазона

anElement.update({
    minimumValue: "0",
    maximumValue: "10000"
});

После выполнения этого кода:

  • значения ниже 0 будут блокироваться;
  • значения выше 10000 будут ограничиваться согласно правилам AutoNumeric;
  • текущее значение будет пересчитано, если оно выходит за пределы диапазона.

Частичное обновление конфигурации

Метод допускает частичное обновление, что позволяет изменять только один аспект поведения:

anElement.update({
    decimalPlaces: 4
});

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

Поведение при изменении формата

При изменении форматирующих параметров AutoNumeric выполняет перерасчёт отображаемого значения:

  • внутреннее числовое значение (raw) остаётся стабильным;
  • строковое представление пересобирается;
  • курсор может быть скорректирован, если формат существенно изменился.

Например, при смене разделителя с , на пробел:

1,234.56 → 1 234.56

Обновление валютного режима

anElement.update({
    currencySymbol: '₽',
    currencySymbolPlacement: 's'
});

Здесь:

  • символ валюты становится рублём;
  • позиция символа изменяется на суффиксную.

Результат:

1234.56 → 1234.56 ₽

Особенности сохранения состояния

Одной из ключевых особенностей update является сохранение состояния:

  • значение в формате float сохраняется;
  • события input и change не сбрасываются;
  • DOM-элемент не пересоздаётся;
  • внешний API-инстанс остаётся валидным.

Это делает метод предпочтительным по сравнению с повторной инициализацией.

Ограничения метода

Несмотря на гибкость, метод имеет ряд особенностей:

  • некоторые изменения могут вызвать перерасчёт позиции курсора;
  • при сильном изменении формата возможна визуальная «перерисовка» поля;
  • не все параметры могут применяться без последствий к текущему значению (например, смена decimalCharacter при наличии введённых данных).

Пример динамического переключения режима

function toggleCurrency(isEuro) {
    anElement.update({
        currencySymbol: isEuro ? '€' : '$',
        currencySymbolPlacement: 'p'
    });
}

Такой подход часто используется в интерфейсах интернет-магазинов и финансовых панелях.

Обновление точности в зависимости от контекста

function setPrecision(mode) {
    anElement.update({
        decimalPlaces: mode === 'high' ? 6 : 2
    });
}

После вызова метод автоматически пересчитает текущее значение под новую точность.

Взаимодействие с пользовательским вводом

При обновлении конфигурации во время активного ввода:

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

Это важно учитывать в формах с высокой интерактивностью.

Повторные вызовы update

Метод можно вызывать многократно. Каждое новое обновление:

  • перезаписывает только указанные параметры;
  • сохраняет остальные настройки;
  • не создаёт новый экземпляр.
anElement.update({ decimalPlaces: 2 });
anElement.update({ currencySymbol: '€' });
anElement.update({ maximumValue: "5000" });

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

Сценарии использования в реальных приложениях

Метод часто применяется в следующих ситуациях:

  • переключение валюты в форме оплаты;
  • адаптация точности под тип данных (например, проценты vs денежные значения);
  • изменение ограничений при выборе категории товара;
  • реакция на настройки пользователя (локаль, формат чисел);
  • динамическое изменение UI в зависимости от API-ответа.

Влияние на производительность

update оптимизирован для частого использования:

  • не пересоздаёт DOM-узел;
  • не удаляет слушатели событий;
  • выполняет минимально необходимый перерасчёт.

Однако при массовых обновлениях большого количества полей возможны задержки из-за перерасчёта форматирования.

Типичные ошибки при использовании

На практике встречаются следующие проблемы:

  • передача несовместимых параметров одновременно (например, конфликт decimalCharacter и digitGroupSeparator в некоторых локалях);
  • ожидание полной переинициализации инстанса вместо обновления;
  • обновление без учёта текущего значения, что приводит к неожиданному форматированию;
  • частые вызовы update внутри событий ввода без оптимизации.

Корректная стратегия — группировать изменения в один вызов.

Итоговая модель поведения метода

Метод update можно рассматривать как механизм «горячей замены конфигурации», при котором:

  • состояние сохраняется;
  • формат пересобирается;
  • ограничения пересчитываются;
  • интерфейс остаётся стабильным.

Это делает его основным инструментом динамического управления форматированием чисел в AutoNumeric.