Модель конфигурации AutoNumeric построена вокруг многоуровневой системы параметров, в которой итоговое поведение каждого экземпляра определяется результатом последовательного наложения нескольких источников настроек. Локальные настройки занимают в этой системе верхний приоритет, поскольку они привязаны к конкретному экземпляру поля и перекрывают любые глобальные или унаследованные значения.
Система разрешения параметров в AutoNumeric строится по принципу приоритетного переопределения. Каждый следующий уровень способен заменить значения предыдущего:
Ключевым моментом является то, что локальный уровень перекрывает все уровни, расположенные ниже по приоритету, но сам может быть частично переопределён изменениями во время работы через API экземпляра.
Глобальная конфигурация задаёт поведение библиотеки по умолчанию. Она применяется ко всем экземплярам, если не указано иное.
AutoNumeric.setGlobal({
digitGroupSeparator: ' ',
decimalCharacter: ',',
currencySymbol: '₽ ',
decimalPlaces: 2
});
Этот слой рассматривается как фундамент, поверх которого накладываются все остальные уровни. Его задача — обеспечить единообразие поведения в приложении.
AutoNumeric поддерживает предустановленные профили, которые позволяют быстро применять наборы параметров. Они используются как шаблоны и могут служить промежуточным уровнем между глобальными и локальными настройками.
new AutoNumeric(element, 'euroPositional');
Фабричные профили удобны в ситуациях, где требуется единообразное поведение для группы полей, но без жёсткой фиксации глобальной конфигурации.
Локальные настройки передаются непосредственно при создании экземпляра и имеют наивысший приоритет среди статических источников конфигурации. Они определяют поведение конкретного поля независимо от глобальных или шаблонных значений.
const an = new AutoNumeric('#price', {
decimalCharacter: '.',
digitGroupSeparator: ',',
decimalPlaces: 4,
currencySymbol: '$ '
});
В этом случае поле #price полностью игнорирует
соответствующие глобальные параметры, заменяя их собственными
значениями.
При создании экземпляра происходит последовательное объединение конфигураций. Алгоритм можно описать как последовательность слияния объектов:
Локальные настройки выступают как финальный слой перед инициализацией внутреннего состояния экземпляра.
AutoNumeric позволяет задавать часть параметров через
data-* атрибуты. Эти значения интерпретируются как
локальные и участвуют в процессе переопределения.
<input id="amount"
data-digit-group-separator="."
data-decimal-character="," />
При инициализации:
new AutoNumeric('#amount', {
decimalPlaces: 2
});
HTML-атрибуты будут объединены с переданными параметрами, при этом локальная конфигурация в JavaScript всё равно имеет более высокий приоритет при конфликте ключей.
Если один и тот же параметр задан на нескольких уровнях, применяется значение с более высоким приоритетом. Например:
decimalPlaces = 2decimalPlaces = 5Итоговое значение: 5
При этом важно учитывать, что часть параметров является зависимой. Например, символы разделителей влияют на форматирование числа и могут изменять поведение парсинга, даже если числовые параметры совпадают.
Локальные настройки не являются статичными после инициализации. AutoNumeric предоставляет механизм обновления конфигурации без пересоздания экземпляра.
an.update({
decimalPlaces: 3,
currencySymbol: '€ '
});
При вызове обновления происходит частичное переслияние конфигурации, где новые локальные параметры заменяют существующие. При этом глобальные настройки не пересчитываются заново, но продолжают участвовать как базовый слой.
Обновление локальной конфигурации не приводит к сбросу значения поля. Текущее числовое состояние сохраняется, а форматирование пересчитывается в соответствии с новыми параметрами.
Это поведение особенно важно при изменении:
Повторная инициализация экземпляра на одном и том же элементе без предварительного уничтожения может привести к конфликту конфигураций. В таких случаях локальные настройки нового экземпляра могут быть частично проигнорированы или объединены с предыдущим состоянием, если не выполнен корректный teardown.
an.remove();
new AutoNumeric('#price', { decimalPlaces: 2 });
Удаление экземпляра очищает привязанные локальные настройки и сбрасывает состояние элемента до исходного.
Некоторые параметры AutoNumeric имеют режимы «жёсткой фиксации». В таких случаях локальные настройки могут иметь не абсолютный, а условный приоритет. Например, параметры, связанные с поведением событий или валидацией, могут игнорировать часть изменений при активных ограничениях.
Это создаёт дополнительный уровень логики:
Некоторые настройки AutoNumeric являются составными структурами. При их переопределении используется глубокое слияние, однако локальные значения всё равно имеют приоритет над любыми вложенными уровнями глобальной конфигурации.
Пример условной структуры:
{
outputFormat: {
style: 'number',
roundingMethod: 'HalfUp'
}
}
Локальное переопределение изменяет только часть структуры:
new AutoNumeric('#field', {
outputFormat: {
roundingMethod: 'Floor'
}
});
В результате сохраняется базовый стиль, но изменяется метод округления.
Каждый экземпляр AutoNumeric хранит собственную копию локальных настроек. Это означает отсутствие перекрёстного влияния между полями даже при идентичной глобальной конфигурации.
const a = new AutoNumeric('#a', { decimalPlaces: 2 });
const b = new AutoNumeric('#b', { decimalPlaces: 6 });
Каждое поле обрабатывает ввод независимо, несмотря на общий источник глобальных параметров.
Наиболее частые ситуации, связанные с приоритетом локальных параметров:
Эти ситуации возникают при недостаточном учёте того, что локальный слой всегда доминирует над глобальным.
Локальная конфигурация не обязана быть полной. При передаче частичного объекта отсутствующие параметры автоматически наследуются из глобального или фабричного уровня.
AutoNumeric.setGlobal({
decimalPlaces: 2,
digitGroupSeparator: ' '
});
new AutoNumeric('#field', {
currencySymbol: '€ '
});
В результате поле получает:
decimalPlaces = 2 (глобально)digitGroupSeparator = ' ' (глобально)currencySymbol = '€ ' (локально)Порядок создания экземпляров не влияет на приоритет локальных настроек, но может влиять на глобальную конфигурацию, если она изменяется после инициализации. Экземпляры не пересчитывают локальные параметры автоматически при изменении глобального слоя.
const an = new AutoNumeric('#field', { decimalPlaces: 2 });
AutoNumeric.setGlobal({
decimalPlaces: 6
});
В этом случае локальное значение сохраняет приоритет, и поле остаётся
с decimalPlaces = 2.
При получении значения через API локальные настройки влияют на формат результата:
Даже если глобальные настройки изменены после инициализации, извлечение значения учитывает локальный контекст экземпляра.
an.getNumber(); // учитывает локальные правила округления
an.getFormatted(); // учитывает локальные символы и разделители