跳到主要内容

ARC 2.0.0-beta.25

事件、导航与可见性

用当前 DSL sugar 写 click、命名页导航和局部更新,并保持 visible 的版本边界。

DSL 的 -> 不是一个泛用箭头。当前 parser 把它作为 button/action click 的简写;其他 node 需要显式写 on <event> -> ...。先分清你要做的是页内更新、AUP page 导航、AFS action,还是浏览器 URL 跳转。

当前可用的动作形状

aup
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_rootset.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 若要同时设置 srcprops 或多个 state 字段,使用完整 events={...}。单行 sugar 并不覆盖所有复合更新;宁可写清楚 event 对象,也不要用多个互相竞态的 click handler 拼出同一逻辑。

可见性不是一份已完全类型化的跨设备承诺

当前 DSL compiler 接受并输出 visible 条件字段,Showcase DSL 也使用它。与此同时,基础 AUPNode TypeScript interface 并没有把 visible 列为统一字段。因此当前文档只把它写为“目标版本下 DSL/runtime 支持的条件字段”,而不是保证每个 renderer 都有同一套可见性语义。

使用它时:

  1. 先给出不依赖可见性仍可理解的核心 tree;
  2. 用实际目标 renderer 验证 condition 为 true/false 时的行为;
  3. 不把隐藏当作权限控制。被隐藏的 UI 仍不应成为未授权 AFS action 的唯一防线。

对 event、state 和 caller scope 的整体边界,读事件、状态与绑定调用者身份与安全