徽章
Ninext 通过在某些标签页上添加徽章来增强 Ninox 界面,从而突出显示重要信息。
- 在“文件”标签页上,蓝色徽章显示添加到该记录的附件数量。
- 在“评论”标签页上,红色徽章表示有新消息,灰色徽章则表示已有较早的评论。
- 在自定义标签页上,您可以修改外观(颜色、标题)并添加徽章,以引起对关键信息的注意。
这些徽章让您无需逐个打开标签页,就能快速发现新信息。
徽章以及下文介绍的标签页自定义,可以在 Ninext 设置的“界面增强”部分中停用:文件和评论上的徽章(默认启用)。
“文件”和“评论”标签页上的徽章
文件标签页
- 蓝色徽章:当存在未关联到任何“文件”字段的文件时出现,即可以在附件标签页下找到的文件。所显示的数字对应这些独立附件的数量。
- 无徽章:未检测到任何独立附件。
评论标签页
- 红色徽章:显示新评论的数量,即发布不足 24 小时的评论。
- 灰色徽章:当没有任何评论发布不足 24 小时时,显示评论总数。
- 无徽章:该记录没有任何评论。

徽章会在相应图标下告知您已有的条目:
在这个例子中,蓝色的 1 表示该记录保存了一个附件,灰色的 1 表示该记录有一条评论。
自定义徽章
在每个标签页的“Display field only, if”公式中,您可以声明一个 onUpdate 函数,它返回一个描述标签页及其徽章的 JSON 对象。下面的示例来自示例数据库中的“Badges”表:其中的 Caption、Color、'badge.caption'……都是该表的字段。
Ninox
function onUpdate(event : any) do
debug(formatJSON(event));
{
caption: Caption,
color: Color,
backgroundColor: BackgroundColor,
tooltip: Tooltip,
badge: {
caption: 'badge.caption',
color: 'badge.color',
backgroundColor: 'badge.backgroundColor'
}
}
end;
true使用 Ninext 自定义标签页

借助 Ninext,您可以通过在标签页的“Display field only, if”公式中定义一个名为 onUpdate 的函数,来修改 Ninox 中用户自定义标签页的外观。该函数返回一个对象,告知 Ninext 需要更改哪些视觉元素。您可以:
- 调整标签页标题(caption)和工具提示。
- 更改文字颜色和背景颜色(普通状态或选中状态)。
- 设置关联表单的背景颜色。
- 在标签页上显示徽章,以突出重要信息。
JSON 属性速览
| 属性 | 说明 | 示例 / 用法 |
|---|---|---|
| caption | 标签页上显示的标题。 | "To Invoice" / "View Invoice" |
| tooltip | 鼠标悬停在标签页上时显示的文字。 | "Click to view details" |
| color | 标签页未选中时的文字颜色。 | "#333333" |
| backgroundColor | 标签页未选中时的背景颜色。 | "#ededed" |
| formBackgroundColor | 标签页处于激活状态时表单(编辑器)的背景颜色。 | "#fafafa" |
| selected.color | 标签页选中时的文字颜色。 | "#ffffff" |
| selected.backgroundColor | 标签页选中时的背景颜色。 | "#4970ff" |
| badge.caption | 徽章中显示的文字、数字或符号。它始终是文本:请用 text() 转换数字。空文本会隐藏徽章。 | "3"(表示 3 位新客户)或 "!"(警示) |
| badge.color | 徽章的文字颜色(默认为白色)。 | "#ffffff" |
| badge.backgroundColor | 徽章的背景颜色(默认为红色)。 | "#4970ff" |
总体流程
- 定义 onUpdate 函数
在标签页的“Display field only, if”公式中,创建一个名为onUpdate的函数。该函数必须返回一个对象(类似 JSON),用于描述要修改哪些显示元素。它的参数是上一次调用时它所返回的对象(第一次调用时为空对象)。 - 返回一个布尔值以决定可见性
“Display field only, if”公式必须以返回true或false结束,以指明该标签页是否应当显示。 - Ninext 应用这些修改
每当用户打开或刷新记录时,Ninext 都会运行onUpdate函数,读取返回的对象,并动态地将外观更改应用到标签页上。
实现示例
完整示例(多个属性)
Ninox
"Declaration of the onUpdate function";
function onUpdate(tabValues : any) do
let nb := this.NumberTest;
{
caption: if nb > 0 then "To Invoice" else "View Invoice" end,
tooltip: "Click to view details",
color: "#333333",
backgroundColor: "#ededed",
formBackgroundColor: "#fafafa",
selected: {
color: "#ffffff",
backgroundColor: "#4970ff"
},
badge: {
caption: if nb = 3 then "3" else if nb = -1 then "!" else "" end,
color: "#ffffff",
backgroundColor: if nb = 3 then "#4970ff" else if nb = -1 then "#ff0000" else "#cccccc" end
}
}
end;
"Determine whether the tab is displayed: shown if NumberTest > 0";
if this.NumberTest > 0 then
true
else
false
end说明:
- 该函数不包含
return:Ninox 的语言中没有这个关键字。它返回最后一个表达式的值,这里就是该对象。 - caption 根据
NumberTest更改标签页标题。 - tooltip 在鼠标悬停时显示一段文字信息。
- color 和 backgroundColor 定义未选中状态下的颜色。
- selected 包含标签页激活状态下的颜色。
- badge 添加一个指示标记(数字或感叹号)以示强调;其他情况下,其标签为空,徽章不会出现。
最简示例(仅徽章)
Ninox
"Declaration of the onUpdate function";
function onUpdate(tabValues : any) do
let newClients := this.NewClients;
{
badge: {
caption: if newClients > 0 then text(newClients) else "" end,
color: "#ffffff",
backgroundColor: "#4970ff"
}
}
end;
"The tab is always displayed";
true说明:
- 仅返回 badge 属性。
- 如果
NewClients大于 0,则显示其值,并由text()转换为文本;否则标签为空,徽章不会出现。 - 该徽章为蓝色背景上的白色文字。
要点
- 最后必须返回布尔值
如果末尾不返回true或false,标签页将不可见。 - 徽章标签始终是文本
只有当badge.caption是非空文本时,Ninext 才会显示徽章。数字(3而不是"3")会让徽章保持隐藏:请使用text()。 - 单独求值的函数
Ninext 只从公式中提取onUpdate函数,然后在记录的上下文中单独对它求值。因此,它看不到“Display field only, if”中其他地方声明的变量或其他函数:请在onUpdate内部声明它所需要的一切。它可以读取记录的字段(this.NumberTest),也可以调用数据库的全局函数。
