SuperAPI AI 工具集

makepad-2.0-splash

前端与建站

查看项目

更新于 10-16 04:43

技能介绍

用途

Makepad 2.0 Splash 是 Makepad 2.0 的运行时 UI 脚本语言,用于在 Rust 应用中定义界面、状态与交互逻辑。它取代旧的编译期 live_design! 宏系统,改为运行时 script_mod! 宏,以支持热重载、流式求值以及面向 AI 的代码生成。

主要能力

  • 脚本结构:每个 Splash 脚本以 use 导入开头,通过 script_mod!{} 宏嵌入 Rust;使用 app_main!(App),并在脚本内定义 let 绑定、函数、状态和 UI。
  • 语法规则:属性之间不用逗号,语句不用分号;支持 key: value 赋值、点路径简写(draw_bg.color: #f00)、合并操作符 key +: { ... }、命名子组件 name := Widget{...}、let 绑定、Rust 绑定 #(Struct::register_widget(vm)) 以及 ~expression 调试日志。
  • 状态管理:通过 mod.state 对象与响应式 on_render 回调管理状态;on_render 在调用 .render() 时重新运行。
  • 事件处理:可在 Splash 内联定义 on_click、on_return、on_startup 等处理器,也可从 Rust 使用 script_eval! 执行 Splash 代码。
  • 函数与控制流:支持 fn 定义、if/else、for、while 等。
  • 网络与解析:支持 net.HttpRequest(含流式响应 is_streaming: true 及 on_stream、on_complete 回调)和 HTML 解析(parse_html、query 选择器、取文本与属性)。
  • 流式求值:解析器支持基于检查点的增量解析,面向 AI/LLM 逐 token 生成,Rust API 为 vm.eval_with_append_source(...)。
  • 热重载:--hot 标志监视 script_mod! 源文件;VM 以 ScriptModKey(文件、行、列)追踪每个 script_mod! 块,通过 ScriptCode::script_mod_overrides 应用更新。

使用方式

Splash 脚本嵌入 Rust 的 script_mod!{} 宏中;运行时可通过 script_eval! 执行 Splash 片段。Makepad Canvas(tools/canvas/)是独立应用,可通过 HTTP/WS 接收并渲染 Splash 代码,HTTP API 提供 /splash(完整渲染)、/splash/stream(流式开始/追加)、/splash/end、/clear 等端点,点击事件通过 WS 以 JSON 形式返回。命令行提供 --hot(热重载)与 --stdin-loop(Studio 模式);调试可用 std.println()/std.print() 或 ~expression。

适用场景

适用于使用 Makepad 构建运行时 UI、希望热重载与流式渲染、或需要 AI/LLM 生成并即时预览 Splash 界面的开发场景。

限制与注意事项

文档列出了若干关键约束:容器应设置 height: Fit(默认 Fill 会导致 0 高度不可见)、根容器用 width: Fill、含文本子节点的 show_bg: true 视图需 new_batch: true、模板中命名子组件要用 :=、draw_bg.border_radius 接收 float。在 Splash 运行时求值路径(POST /splash、Splash.set_text)中,ScrollYView 渲染为空白、on_after_apply/ScriptHook 不会被调用、类型默认属性与命名子组件不会完整继承;Canvas 语法与 script_mod! 上下文存在差异(如 border radius 用 draw_bg.radius、padding 用 Inset{}、align 用 Align{})。Canvas 的其他注意事项包括:POST 体积上限 512KB、健康检查用 GET /ping、CJK 文本受支持。