DSL 的 -> 不是一个泛用箭头。当前 parser 把它作为 button/action click 的简写;其他 node 需要显式写 on <event> -> ...。先分清你要做的是页内更新、AUP page 导航、AFS action,还是浏览器 URL 跳转。
当前可用的动作形状
button open "Open" primary -> page details
button load "Load" primary -> set viewer src "/items/42"
button bump "Bump" primary -> set dial state {value: 7, dirty: true}
action -> exec "/.auth/logout"
action -> navigate "/.well-known/service/login"它们的边界是:
| DSL 形式 | 编译后的意图 |
|---|---|
-> page details | _root 的 set.page,切换到命名 AUP page |
-> set <id> src ... | 更新目标 node 的数据路径 |
-> set <id> state ... | 更新目标 node 的 UI-local state |
-> exec ... | 调用 AFS action |
-> navigate ... | 客户端浏览器级 URL 导航 |
旧 JSON 的 page: "details" 是已弃用快捷形式。新 DSL 应使用 -> page details,让编译产物使用当前的 _root + set.page 形状。
一次 update 若要同时设置 src、props 或多个 state 字段,使用完整 events={...}。单行 sugar 并不覆盖所有复合更新;宁可写清楚 event 对象,也不要用多个互相竞态的 click handler 拼出同一逻辑。
可见性不是一份已完全类型化的跨设备承诺
当前 DSL compiler 接受并输出 visible 条件字段,Showcase DSL 也使用它。与此同时,基础 AUPNode TypeScript interface 并没有把 visible 列为统一字段。因此当前文档只把它写为“目标版本下 DSL/runtime 支持的条件字段”,而不是保证每个 renderer 都有同一套可见性语义。
使用它时:
- 先给出不依赖可见性仍可理解的核心 tree;
- 用实际目标 renderer 验证 condition 为 true/false 时的行为;
- 不把隐藏当作权限控制。被隐藏的 UI 仍不应成为未授权 AFS action 的唯一防线。