Форматтеры

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

Обзор

1. Описание синтаксиса

Базовый вызов форматтера выглядит так:

{d.property:formatter1:formatter2(...)}

Например, чтобы преобразовать строку "JOHN" в "John", сначала используется форматтер lowerCase для перевода всех букв в нижний регистр, затем ucFirst — для заглавной первой буквы.

2. Пример

Данные:

{
  "name": "JOHN",
  "birthday": "2000-01-31"
}

Шаблон:

Меня зовут {d.name:lowerCase:ucFirst}. Я родился {d.birthday:formatD(LL)}.

3. Результат

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

Меня зовут John. Я родился January 31, 2000.

Константные параметры

1. Описание синтаксиса

Многие форматтеры поддерживают один или несколько константных параметров. Они разделяются запятыми и заключаются в скобки для изменения результата. Например, :prepend(myPrefix) добавит "myPrefix" перед текстом.
Примечание: если параметр содержит запятые или пробелы, его нужно заключать в одинарные кавычки, например: prepend('my prefix').

2. Пример

Пример в шаблоне (подробности см. в описании конкретного форматтера).

3. Результат

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

Динамические параметры

1. Описание синтаксиса

Форматтеры также поддерживают динамические параметры. Такие параметры начинаются с точки (.) и не заключаются в кавычки.
Есть два способа задать динамические параметры:

  • Абсолютный JSON Path: начинается с d. или c. (ссылка на корневые или дополнительные данные).
  • Относительный JSON Path: начинается с одной точки (.), что означает поиск свойства в текущем родительском объекте.

Например:

{d.subObject.qtyB:add(d.subObject.qtyC)}

То же самое можно записать как относительный путь:

{d.subObject.qtyB:add(.qtyC)}

Если нужно обратиться к данным на более высоком уровне (родитель и выше), можно использовать несколько точек:

{d.subObject.qtyB:add(..qtyA):add(.qtyC)}

2. Пример

Данные:

{
  "id": 10,
  "qtyA": 20,
  "subObject": {
    "qtyB": 5,
    "qtyC": 3
  },
  "subArray": [{
    "id": 1000,
    "qtyE": 3
  }]
}

Использование в шаблоне:

{d.subObject.qtyB:add(d.subObject.qtyC)}      // Результат: 8 (5 + 3)
{d.subObject.qtyB:add(.qtyC)}                   // Результат: 8
{d.subObject.qtyB:add(..qtyA):add(.qtyC)}        // Результат: 28 (5 + 20 + 3)
{d.subArray[0].qtyE:add(..subObject.qtyC)}       // Результат: 6 (3 + 3)

3. Результат

В приведённых примерах результаты: 8, 8, 28 и 6 соответственно.

Примечание: использование пользовательских итераторов или фильтров массива как динамических параметров не допускается, например:

{d.subObject.qtyB:add(..subArray[i].qtyE)}
{d.subObject.qtyB:add(d.subArray[i].qtyE)}