Динамическое изменение формата

Библиотека AutoNumeric предоставляет механизм, позволяющий изменять форматирование числового значения в поле ввода без необходимости пересоздания экземпляра. Это особенно важно в интерфейсах, где требования к отображению данных могут меняться в зависимости от контекста: валюты, режима отображения, локали или уровня точности. Динамическое изменение формата реализуется через обновление конфигурации экземпляра и повторную инициализацию внутренних параметров форматирования.

Базовая модель обновления конфигурации

Каждый экземпляр AutoNumeric создаётся на основе набора опций, определяющих правила форматирования: разделители, количество знаков после запятой, символ валюты, правила округления и другие параметры. После инициализации эти параметры не являются статичными — они могут быть изменены через API библиотеки.

Основной механизм изменения формата связан с обновлением конфигурации:

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

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

Метод updateSettings и его поведение

Центральным инструментом динамического изменения формата является метод updateSettings. Он позволяет модифицировать текущие параметры экземпляра без разрушения привязки к DOM-элементу.

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

// изменение формата
anElement.updateSettings({
    currencySymbol: '€ ',
    decimalPlaces: 3
});

После вызова updateSettings происходит:

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

Важно учитывать, что изменение параметров влияет только на визуальное представление, но не на raw value.

Частичное обновление параметров

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

Типичный сценарий — переключение режима отображения:

anElement.updateSettings({
    decimalPlaces: 0
});

В результате:

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

Такой подход снижает риск побочных эффектов, связанных с полной переинициализацией экземпляра.

Изменение формата в зависимости от состояния интерфейса

Динамическое форматирование часто используется для адаптации поля ввода к состоянию приложения. Типичные сценарии включают переключение между режимами:

  • краткое отображение (целые числа);
  • расширенное отображение (с точностью до копеек или тысячных);
  • локализованное представление (разные валюты и разделители);
  • режим редактирования и режим просмотра.

Пример переключения между режимами:

function setCompactMode(anElement) {
    anElement.updateSettings({
        decimalPlaces: 0,
        digitGroupSeparator: ' '
    });
}

function setDetailedMode(anElement) {
    anElement.updateSettings({
        decimalPlaces: 4,
        digitGroupSeparator: ','
    });
}

При таком подходе значение остаётся неизменным, но его представление адаптируется под контекст использования.

Переключение валют и символов

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

anElement.updateSettings({
    currencySymbol: '₸ ',
    currencySymbolPlacement: 'p'
});

После обновления:

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

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

Изменение точности отображения

Количество знаков после запятой — один из наиболее чувствительных параметров форматирования. Его изменение требует перерасчёта отображаемого значения с учётом выбранной стратегии округления.

anElement.updateSettings({
    decimalPlaces: 2,
    roundingMethod: 'S' // стандартное округление
});

При увеличении точности может происходить:

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

При уменьшении точности:

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

Синхронизация с пользовательским вводом

Изменение формата во время активного ввода требует аккуратного управления состоянием поля. AutoNumeric автоматически синхронизирует внутренние данные, но поведение зависит от фокуса и текущей позиции курсора.

При обновлении настроек во время редактирования:

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

Пример сценария:

input.addEventListener('focus', () => {
    anElement.updateSettings({
        decimalPlaces: 4
    });
});

Такая логика используется для расширения точности во время редактирования и упрощения отображения в режиме покоя.

Динамическое изменение локали отображения

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

anElement.updateSettings({
    digitGroupSeparator: '.',
    decimalCharacter: ','
});

При смене локали необходимо одновременно изменять:

  • символ десятичного разделителя;
  • разделитель групп разрядов;
  • позицию валютного символа (если используется).

Ограничения динамического изменения

Несмотря на гибкость, динамическое изменение формата имеет ряд ограничений, связанных с внутренней архитектурой библиотеки:

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

Особенно чувствительными являются параметры, связанные с округлением и количеством знаков после запятой, так как они напрямую влияют на числовую точность отображения.

Режимы переключения формата в реальном времени

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

element.addEventListener('mouseenter', () => {
    anElement.updateSettings({
        decimalPlaces: 4
    });
});

element.addEventListener('mouseleave', () => {
    anElement.updateSettings({
        decimalPlaces: 2
    });
});

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

Оптимизация частых изменений формата

При интенсивном использовании динамического форматирования важно учитывать производительность. Рекомендуется:

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

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

Поведение при конфликте настроек

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

AutoNumeric в таких случаях применяет внутренние правила приоритизации:

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

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