视图字段事件

Ninext 为 Ninox 的视图添加了事件:点击视图字段中的某一行(onclick),以及在表视图中选中某条记录(onselected)。在您的公式中,这些函数必须完全按此书写,全部小写。
这些事件可以在 Ninext 设置的“界面增强”部分中停用:视图事件 (onClick, onSelect)(默认启用)。
点击视图字段中的一行:onclick
传给 onclick 的 JSON 属性速览
| 属性 | 说明 | 示例 / 用法 |
|---|---|---|
| previousID | 点击之前在视图中选中的记录的 ID;如果之前没有选中记录,则为空。 | “A1” |
| targetID | 被点击记录的 ID。 | “A3” |
| targetLineNum | 用户点击的行号(从 0 开始)。 | 3 |
| targetColumnNum | 视图中被点击的列号(从 0 开始)。 | 4 |
| targetColumnValue | 被点击单元格中显示的文本值。 | “Lisa” |
| targetColumnCaption | 来自字段配置的列标题(取自 "caption" 或 "field.caption")。 | “First Name” |
总体流程
- 在视图字段公式中定义 onclick 函数
onclick 函数必须写入视图字段的公式中。它接收一个对象(名为 "event"),其中包含上述各项属性。在这个函数中,this指的是包含该视图字段的记录,而不是被点击的那一行:被点击的行要通过event.targetID找到。 - 执行自定义代码
当用户在视图中点击或轻触某个单元格时,Ninext 的钩子会执行 onclick 函数。脚本随后可以,例如:- 更新某条记录的属性(例如切换一个布尔字段)。
- 把被点击记录的 ID 存入指定字段。
- 根据被点击的列触发条件动作。
- 返回视图内容
函数末尾,公式必须返回视图的内容(例如 "select Customer")。这告诉 Ninox 在脚本执行后应显示哪些记录。
实现示例
完整示例
Ninox
function onclick(event : any) do
'ID of selected customer' := event.targetID;
var selCustomer := first(select Customer where Id = event.targetID);
debug("onclick");
if event.targetColumnCaption like "checked" then
selCustomer.(Checked := not Checked);
true
else
if event.targetColumnNum = 0 then
true
else
false
end
end
end;
select Customer说明:
- 该函数首先把被点击记录的 ID 存入字段 "ID of selected customer"。
- 然后从 "Customer" 表中取出相应的记录。
- 如果被点击单元格的列标题包含 "checked",则切换该记录上的 "Checked" 字段,并返回 true 表示该点击已被处理。
- 否则,函数根据被点击的列号是否为 0 返回 true 或 false。
- 最后,公式返回 "select Customer",在脚本执行后显示视图的内容。
最简示例
Ninox
function onclick(event : any) do
'ID of selected customer' := event.targetID;
debug("Clicked on Customer " + event.targetID);
"No specific action is performed here.";
false
end;
select Customer说明:
- 这段脚本只是存下被点击记录的 ID,并记录一条调试信息。
- 返回 false 会让未被专门处理的动作按默认行为继续进行。
- 与往常一样,公式以 "select Customer" 结尾,以显示视图的内容。
需要记住的要点
- 在视图字段公式中的位置:
onclick 函数必须直接定义在视图字段的公式中,而不是在触发器或应用的其他部分。 - 返回视图内容:
与其他期望返回布尔值的函数不同,公式的最后一行必须返回视图的内容(例如 "select Customer")。 - onclick 返回的值:
true表示该点击已被处理:Ninox 不会打开被点击的记录。false或不返回任何值,则让 Ninox 执行其通常的行为,打开该记录。点击分组行不会调用 onclick。 - 单独求值的函数:
Ninext 只从公式中提取 onclick 函数,然后单独对它求值。因此,它看不到公式中其他地方声明的变量或其他函数:请在 onclick 内部声明它所需要的一切。 - 利用事件参数:
利用 "event" 对象提供的信息(previousID、targetID、targetLineNum、targetColumnNum、targetColumnValue、targetColumnCaption),根据点击的上下文来调整您的动作。 - 在不同设备上测试:
请确保该函数在桌面设备和触摸设备上都能正常工作,因为该钩子同时处理 "click" 和 "touchend" 事件。
在表视图中选中记录:onselected
每当在表视图(表中记录的列表)中选中一行时,Ninext 都会调用函数 onselected()。请在表的读取权限公式(“Readable if”)中声明它,不带参数。在这个函数中,this 指的是被选中的记录。它返回的值不会被使用,Ninox 会照常打开该记录。
Ninox
function onselected() do
debug("customer->onselect : " + this)
end;
true在这里,只要 Ninext 面板处于打开状态,每次选中都会在调试跟踪器中写入一行,概括所选的记录。
该公式仍保留其原有作用:Ninox 使用它的最后一个值来决定谁可以读取该表。因此,请以您通常的读取条件作为结尾;像这里一样使用 true,对向所有人开放的表的读取权限没有任何改变。与 onclick 一样,该函数也是被单独从公式中提取出来的。
