Наследование настроек

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

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

  • встроенные значения по умолчанию библиотеки;
  • глобально заданные настройки;
  • предустановленные конфигурации (пресеты);
  • настройки, переданные при инициализации конкретного экземпляра;
  • локальные HTML-атрибуты элемента (при использовании data-* конфигураций);
  • динамические изменения после инициализации.

Каждый следующий уровень перекрывает предыдущий только в тех свойствах, которые явно указаны.


Базовые настройки и конфигурация по умолчанию

AutoNumeric содержит внутренний набор параметров, определяющих поведение форматирования чисел «из коробки». Эти значения используются в случае отсутствия пользовательских настроек.

К таким параметрам относятся:

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

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


Глобальная конфигурация

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

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

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

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

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


Предустановленные конфигурации (пресеты)

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

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

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

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


Локальные настройки экземпляра

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

Этот уровень позволяет точно контролировать поведение отдельного input-элемента, не затрагивая остальные компоненты системы.

Локальные настройки обладают более высоким приоритетом по сравнению с:

  • глобальной конфигурацией;
  • пресетами;
  • значениями по умолчанию.

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

Пример логики приоритета:

  1. дефолтные значения библиотеки;
  2. глобальные настройки;
  3. выбранный пресет;
  4. настройки экземпляра.

HTML-атрибуты как источник конфигурации

Возможность задавать параметры через data-атрибуты добавляет ещё один уровень наследования, тесно связанный с DOM-элементом.

При инициализации AutoNumeric считывает атрибуты элемента и преобразует их в конфигурационные значения. Этот уровень может:

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

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


Порядок приоритета и механизм слияния

Механизм наследования в AutoNumeric основан на глубоком объединении объектов конфигурации. При этом важен не только порядок уровней, но и тип слияния.

Основные принципы:

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

Итоговая конфигурация формируется как результат последовательного наложения:

дефолт → глобальная конфигурация → пресет → локальные опции → HTML-атрибуты

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


Переопределение значений и конфликтующие параметры

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

Особое внимание уделяется параметрам, влияющим на визуальное и логическое представление числа:

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

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


Наследование при динамическом создании экземпляров

При создании экземпляра AutoNumeric динамически (например, после загрузки страницы или при добавлении новых элементов в DOM) механизм наследования остаётся неизменным.

Последовательность обработки включает:

  1. считывание базовых значений;
  2. применение глобальных настроек;
  3. наложение пресета;
  4. применение переданных опций;
  5. анализ HTML-атрибутов;
  6. формирование итоговой конфигурации;
  7. инициализация экземпляра.

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


Клонирование конфигураций

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

Клонирование используется для:

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

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


Изменение конфигурации после инициализации

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

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

Таким образом:

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

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


Конфигурационные зависимости и согласованность данных

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

При изменении любого уровня конфигурации необходимо учитывать:

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

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


Поведение при частичном переопределении

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

Такой механизм позволяет:

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

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


Роль порядка подключения и инициализации

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

Если глобальная конфигурация задаётся после создания экземпляров, она не влияет на уже существующие поля, поскольку наследование происходит только в момент инициализации.

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