Событие кнопки

Запись ButtonEvent демонстрационной базы: у кнопки «Bonjour» красный значок «2»

В таблице «ButtonEvent» демонстрационной базы поля записи («caption», «the color», «Tooltip», «badge.caption», «badge.color») задают надпись, цвет, всплывающую подсказку и значок кнопки «Bonjour» с помощью функции onUpdate, описанной ниже.

Настройка кнопок с помощью Ninext

Ninext позволяет менять внешний вид кнопок Ninox: для этого в формуле «Display field only, if» кнопки объявляется функция onUpdate. Она должна возвращать объект с описанием изменяемых элементов оформления, а сам скрипт должен завершаться логическим значением, указывающим, показывать кнопку или нет.

Так вы можете:

  • изменить надпись на кнопке;
  • изменить всплывающую подсказку (title) кнопки;
  • изменить цвет кнопки, выбрав один из трёх стилей кнопок Ninox: "blue" (синий фон), "red" (розовый фон, красный текст) и "grey" (белый фон, синяя обводка, как у кнопки «Bonjour» выше);
  • показать значок, привлекающий внимание к важным сведениям.

Эта функция отключается в Настройках Ninext, раздел «Улучшения интерфейса»: События кнопок (onUpdate) (включено по умолчанию).

Краткий обзор свойств JSON

СвойствоОписаниеПример / применение
captionТекст, показанный на кнопке."Send" / "Cancel"
tooltip или titleТекст, показываемый при наведении, в виде подсказки."Click to send"
buttonColorЦвет кнопки: "blue", "red" или "grey", и ничего другого. Любое другое значение игнорируется, и кнопка сохраняет свой цвет."blue"
badgeОбъект с описанием значка, показываемого на кнопке.См. подробности ниже
badge.captionТекст, число или символ, показываемый на значке. Это всегда текст: преобразуйте число с помощью text(). Пустой текст скрывает значок."3" или "!"
badge.colorЦвет фона значка (по умолчанию красный). Текст значка остаётся белым."red" или "#4970ff"

Общий порядок работы

  1. Объявите функцию onUpdate
    В формуле «Display field only, if» кнопки объявите функцию onUpdate. Она возвращает объект (в формате JSON) с описанием изменяемых элементов. В качестве параметра она получает надпись и цвет кнопки в том виде, в каком они заданы в Ninox: { caption, buttonColor }.
  2. Верните логическое значение видимости
    Формула должна заканчиваться возвратом логического значения (true или false), указывающего, показывать кнопку или нет.
  3. Ninext применяет изменения
    При открытии или обновлении записи Ninext выполняет функцию onUpdate, читает возвращённый объект и на лету применяет изменения оформления к кнопке.

Реализация

Единый блок кода в формуле «Display field only, if»

Ninox
"Declaration of the onUpdate function that customizes the button";
function onUpdate(buttonValues : any) do
 let count := this.Count;
 {
      caption: if count > 0 then
          "Send (" + count + ")"
      else
          "Send"
      end,
      tooltip: "Click to send your request",
      buttonColor: if count > 0 then "red" else "blue" end,
      badge: {
           caption: if count > 0 then text(count) else "" end,
           color: "red"
      }
 }
end;

"Determination of the button's visibility";
this.Count >= 0

Пояснения:

  • Функция onUpdate строит объект, позволяющий изменить надпись на кнопке (с числовым указателем, если Count положителен), подсказку, цвет кнопки и показать значок.
  • Последний блок кода возвращает логическое значение, определяющее, показывать кнопку или нет.

Минимальный пример (только значок)

Ninox
"Declaration of the onUpdate function to display only a badge";
function onUpdate(buttonValues : any) do
 let newItems := this.newItems;
 {
      badge: {
           caption: if newItems > 0 then text(newItems) else "" end,
           color: "red"
      }
     }
end;
"The button is always displayed";
true

Пояснения:

  • Возвращается только свойство badge, чтобы показать значение, если newItems больше 0.
  • Кнопка отображается безусловно.

Важные замечания

  • Обязательный логический возврат в конце
    Без возврата true или false в конце кнопка не будет видна.
  • Подпись значка — всегда текст
    Ninext показывает значок, только если badge.caption — непустой текст. Число (3 вместо "3") оставляет значок скрытым: используйте text().
  • Функция вычисляется отдельно
    Ninext извлекает из формулы одну лишь функцию onUpdate, а затем вычисляет её отдельно, в контексте записи. Поэтому она не видит ни переменных, ни других функций, объявленных в другом месте «Display field only, if»: объявите внутри onUpdate всё, что ей нужно. Она может читать поля записи (this.Count) и вызывать глобальные функции базы.