В библиотеке AutoNumeric конфигурация числового поля строится по принципу многоуровневого наследования, где итоговое поведение экземпляра определяется объединением нескольких источников настроек. Такой подход позволяет одновременно поддерживать глобальные стандарты форматирования и точечные переопределения для отдельных полей без дублирования кода.
Базовая идея заключается в том, что каждая новая конфигурация не существует изолированно, а формируется как результат наложения более приоритетных уровней поверх менее приоритетных. В типичном сценарии участвуют:
Каждый следующий уровень перекрывает предыдущий только в тех свойствах, которые явно указаны.
AutoNumeric содержит внутренний набор параметров, определяющих поведение форматирования чисел «из коробки». Эти значения используются в случае отсутствия пользовательских настроек.
К таким параметрам относятся:
Эти параметры формируют фундаментальную конфигурацию, которая всегда применяется как отправная точка. Она не предназначена для прямого редактирования, но служит основой для всех последующих уровней наследования.
Глобальный уровень используется для задания единых правил форматирования, применяемых ко всем экземплярам AutoNumeric, если они явно не переопределены.
Механизм глобальных настроек реализует принцип централизованного управления поведением библиотеки. При инициализации нового поля библиотека сначала проверяет наличие глобальных параметров и объединяет их с базовыми значениями.
Глобальная конфигурация обычно применяется в ситуациях, когда:
С технической точки зрения глобальные параметры выступают промежуточным слоем между дефолтами и локальными настройками экземпляра.
AutoNumeric поддерживает набор типовых конфигураций, представляющих собой заранее определённые комбинации параметров. Такие пресеты предназначены для ускорения настройки стандартных сценариев:
Пресет представляет собой именованный объект конфигурации, который может быть использован как базовый слой при создании экземпляра.
При использовании пресета происходит его объединение с глобальными и локальными параметрами. При этом пресет имеет более высокий приоритет, чем глобальные настройки, но более низкий, чем явно переданные опции экземпляра.
Наиболее часто используемый уровень наследования — конфигурация, передаваемая при инициализации конкретного поля.
Этот уровень позволяет точно контролировать поведение отдельного input-элемента, не затрагивая остальные компоненты системы.
Локальные настройки обладают более высоким приоритетом по сравнению с:
При создании экземпляра происходит глубокое объединение всех доступных источников конфигурации, где локальные параметры выступают финальным слоем переопределения.
Пример логики приоритета:
Возможность задавать параметры через data-атрибуты добавляет ещё один уровень наследования, тесно связанный с DOM-элементом.
При инициализации AutoNumeric считывает атрибуты элемента и преобразует их в конфигурационные значения. Этот уровень может:
HTML-атрибуты обладают высокой приоритетностью, поскольку относятся непосредственно к конкретному DOM-узлу. В некоторых сценариях они рассматриваются как финальный слой перед созданием экземпляра.
Механизм наследования в AutoNumeric основан на глубоком объединении объектов конфигурации. При этом важен не только порядок уровней, но и тип слияния.
Основные принципы:
Итоговая конфигурация формируется как результат последовательного наложения:
дефолт → глобальная конфигурация → пресет → локальные опции → HTML-атрибуты
Такой порядок обеспечивает предсказуемость поведения и позволяет точно контролировать каждый уровень.
При наличии конфликтующих значений система всегда выбирает параметр с более высоким приоритетом. Например, если глобально задана точность два знака после запятой, а для конкретного поля указано четыре, итоговым значением станет четыре.
Особое внимание уделяется параметрам, влияющим на визуальное и логическое представление числа:
Эти параметры считаются критическими и всегда подчиняются строгому приоритету наследования.
При создании экземпляра AutoNumeric динамически (например, после загрузки страницы или при добавлении новых элементов в DOM) механизм наследования остаётся неизменным.
Последовательность обработки включает:
Особенность динамического режима заключается в том, что изменения глобальной конфигурации после создания экземпляров не влияют автоматически на уже созданные поля, если не предусмотрено их пересоздание или обновление.
AutoNumeric поддерживает возможность повторного использования уже созданной конфигурации через механизм клонирования. Клонированная конфигурация наследует все параметры исходной, но может быть дополнительно модифицирована.
Клонирование используется для:
При клонировании создаётся новый объект конфигурации, который сохраняет структуру исходного, но не связан с ним по ссылке, что исключает побочные эффекты при последующих изменениях.
После создания экземпляра конфигурация становится частично неизменяемой. Однако библиотека допускает обновление отдельных параметров через специализированные методы.
В этом случае наследование работает иначе: изменения применяются поверх уже сформированной итоговой конфигурации, но не пересчитывают всю цепочку источников.
Таким образом:
Это поведение важно для предотвращения непредсказуемых изменений форматирования во время работы приложения.
Наследование настроек в AutoNumeric тесно связано с обеспечением согласованности между визуальным отображением и внутренним числовым значением.
При изменении любого уровня конфигурации необходимо учитывать:
Несогласованные настройки на разных уровнях могут привести к различию между отображаемым и фактическим значением, что особенно критично в финансовых и расчётных системах.
Если в локальной конфигурации задан только один параметр, например разделитель десятичных знаков, все остальные значения продолжают наследоваться из более низких уровней без изменений.
Такой механизм позволяет:
При этом важно учитывать, что отсутствие параметра не означает его сброс, а трактуется как необходимость наследования.
В системах, где AutoNumeric инициализируется после загрузки глобальных настроек, порядок подключения становится критически важным.
Если глобальная конфигурация задаётся после создания экземпляров, она не влияет на уже существующие поля, поскольку наследование происходит только в момент инициализации.
Таким образом, конфигурационная иерархия фиксируется во времени и не пересчитывается автоматически при изменении более низких уровней после создания экземпляра.