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

В таблице «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" |
Общий порядок работы
- Объявите функцию onUpdate
В формуле «Display field only, if» кнопки объявите функцию onUpdate. Она возвращает объект (в формате JSON) с описанием изменяемых элементов. В качестве параметра она получает надпись и цвет кнопки в том виде, в каком они заданы в Ninox:{ caption, buttonColor }. - Верните логическое значение видимости
Формула должна заканчиваться возвратом логического значения (trueилиfalse), указывающего, показывать кнопку или нет. - 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) и вызывать глобальные функции базы.
