事件与命令
界面上的交互分两条路径:按钮事件(前端 → Lua)和命令(Lua → 前端)。
本页说明如何用 PushCommand 把结果推送给界面。
按钮事件:前端 → Lua
按钮 schema 中的 event 与 click 定义了一个事件。点击时前端会发起 callUIEvent,
框架找到同名事件并执行 click(form):
{ type = "button", label = "记录当前位置", event = "record",
click = function(form)
local pos = hmPlayer.getCurrentPosition()
GoPrint("当前位置", pos.x, pos.y)
end,
}
click 在界面环境中执行,可用 PushCommand、AddTask、RemoveTask、DoLuaString 等。
命令:Lua → 前端
PushCommand(target, command, args)
| 参数 | 类型 | 说明 |
|---|---|---|
target | string | nil | 目标组件的 field;全局命令传 nil |
command | string | 命令名 |
args | any | 命令参数 |
命令会作为 pushCommand 事件发送给前端,由对应组件处理。
内置命令
openForm —— 打开子表单
全局命令,target 传 nil。前端会弹出子表单对话框。
| 参数 | 类型 | 说明 |
|---|---|---|
formName | string | 要打开的表单名(RegisterForm 注册的名字) |
title | string | 弹窗标题(可选) |
userArgs | table | 透传给子表单 submitForm 的参数(可选) |
PushCommand(nil, "openForm", {
formName = "selectUseItem",
title = "选择物品",
userArgs = { source = "main" },
})
addItems —— 向 list 添加条目
target 为 list 组件的 field。args 可以是单个对象或对象数组。
-- 追加一条
PushCommand("points", "addItems", {
label = "洛阳(100,200)",
x = 100, y = 200,
})
-- 追加多条
PushCommand("useItems", "addItems", {
{ label = "金创药" },
{ label = "还魂丹" },
})
显示时默认取每行的 label 字段(可用 titleKey 改为其它键)。
addRow —— 向 tableData 添加一行
target 为 tableData 组件的 field,args 是一个行对象,键需与 columns 的 key 对应。
PushCommand("rows", "addRow", {
name = "猫眼石",
count = 3,
})
日志输出
若只是想输出信息,用 GoPrint 即可,它会同时写入服务器日志与前端日志面板:
GoPrint("已添加", #items, "个物品")
前端组件与命令的对应关系
| 命令 | 处理者 | 触发方式 |
|---|---|---|
openForm | 任务面板 | 打开子表单弹窗 |
addItems | list 组件 | target 等于该组件的 field |
addRow | tableData 组件 | target 等于该组件的 field |
收到命令后,前端会更新表单值并自动刷新 schema,因此列表/表格内容会立即变化。
备注
target 与 command 需与组件匹配:例如 addItems 的 target 必须是某个 list 的 field,
否则命令会被忽略。
下一步:发布与安装。