Синхронизация настроек

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

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


Архитектура конфигураций AutoNumeric

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

  1. Глобальные настройки библиотеки
  2. Переданные пользовательские параметры при инициализации
  3. Локальные изменения через методы инстанса
  4. Наследуемые или клонируемые конфигурации от других экземпляров

При этом итоговая конфигурация представляет собой результат глубокого объединения (deep merge), где более приоритетные уровни перекрывают базовые значения.


Глобальная синхронизация через AutoNumeric.setGlobalSettings

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

AutoNumeric.setGlobalSettings({
    digitGroupSeparator: ' ',
    decimalCharacter: ',',
    decimalPlaces: 2
});

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

Особенность поведения

Глобальные настройки:

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

Синхронизация между экземплярами через anDefaultSettings

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

const currencySettings = {
    currencySymbol: '$',
    currencySymbolPlacement: 'p',
    decimalPlaces: 2
};

const an1 = new AutoNumeric('#input1', currencySettings);
const an2 = new AutoNumeric('#input2', currencySettings);

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


Клонирование настроек между экземплярами

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

const an1 = new AutoNumeric('#input1', {
    decimalPlaces: 3,
    digitGroupSeparator: ' '
});

const an2 = new AutoNumeric('#input2', an1.getSettings());

Метод getSettings() возвращает текущую активную конфигурацию, которая может быть повторно использована.

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

  • создаётся новый независимый инстанс
  • изменения в одном объекте не влияют на другой
  • сохраняется точное состояние конфигурации на момент вызова

Динамическая синхронизация через update и set

AutoNumeric поддерживает изменение настроек во время выполнения без пересоздания инстанса.

Метод update

an1.update({
    decimalPlaces: 0,
    currencySymbol: '€'
});

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

Метод set с изменением формата

an1.set(12345.678);

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


Синхронизация группы полей ввода

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

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

const fields = [
    new AutoNumeric('#price', sharedSettings),
    new AutoNumeric('#tax', sharedSettings),
    new AutoNumeric('#total', sharedSettings)
];

Все поля используют одинаковую конфигурацию, но изменения каждого инстанса по-прежнему локальны.


Частичная синхронизация параметров

AutoNumeric позволяет обновлять только часть настроек без затрагивания остальных.

an1.update({
    decimalPlaces: 4
});

В этом случае:

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

Наследование конфигурации через шаблоны

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

const baseSettings = {
    decimalCharacter: '.',
    digitGroupSeparator: ','
};

const priceSettings = {
    ...baseSettings,
    decimalPlaces: 2,
    currencySymbol: '$'
};

const weightSettings = {
    ...baseSettings,
    decimalPlaces: 3,
    suffixText: ' kg'
};

Такой подход позволяет централизованно управлять общими параметрами и избегать дублирования.


Синхронизация через события

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

an1.node.addEventListener('autoNumeric:rawValueModified', (e) => {
    an2.set(e.detail.newRawValue);
});

В этом сценарии:

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

Конфликты при синхронизации настроек

При работе с несколькими уровнями конфигураций возможны конфликты приоритетов:

  1. Локальный update перекрывает глобальные настройки
  2. setGlobalSettings не влияет на уже созданные инстансы
  3. Клонирование фиксирует состояние на момент копирования

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


Синхронизация и повторная инициализация

В некоторых случаях требуется полное обновление конфигурации через пересоздание инстанса:

an1.remove();

an1 = new AutoNumeric('#input1', newSettings);

Такой подход используется, когда:

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

Производительность при синхронизации

При массовой синхронизации важно учитывать нагрузку на DOM:

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

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


Изоляция и независимость состояний

Несмотря на возможность синхронизации, каждый инстанс AutoNumeric сохраняет изолированное состояние:

  • собственное внутреннее значение (raw value)
  • собственное отображение (formatted value)
  • собственный стек конфигураций

Синхронизация в библиотеке всегда является явной операцией, а не автоматическим поведением.