Checkbox

概述

`Checkbox` 路由到 `rml_ui::Checkbox`,**Stateless** 组件。

基本用法

<Checkbox label="记住我" on-click={on_toggle_remember} />
<Checkbox label={agree_label} selected={is_agreed} on-click={on_toggle_agree} />

属性

| 属性 | 类型 | 绑定 | 说明 | |------|------|------|------| | `label` | 字符串 | `{expr}` | 标签文字 | | `tooltip` | 字符串 | — | 提示 | | `disabled` | 布尔 | `{expr}` | 禁用 | | `selected` / `checked` | 布尔 | `{expr}` | 选中态(`checked` 映射为 `.selected()`) | | `small` / `large` 等 | 布尔标志 | — | 尺寸 |

事件

| 事件 | 回调 | |------|------| | `on-click` | `fn(&mut self, ev: &ClickEvent, cx: &mut Context<Self>)` |

数据绑定

- `checked={field}` — **自动双向绑定**(Stateless EventClick 机制) - 正向:`field` 值 → `.checked(bool)` 显示选中态 - 反向:点击 → `on_click(&bool)` 事件自动回写 `field` + `bump_version` + `cx.notify()` - 无需声明 `on-click` 手动回写,框架自动注入合并回调 - `selected={expr}` — 单向显示选中态(不触发双向绑定)

<!-- 自动双向绑定:点击即回写 agree 字段 -->
<Checkbox label="同意条款" checked={agree} />

子节点 / 插槽

可选文本子节点替代 `label`。

完整示例

<Checkbox label="启用通知" selected={notify_enabled} on-click={on_toggle_notify} />

常见错误

1. **只绑 `selected` 不写 `on-click`** — `selected` 是单向绑定;双向绑定请用 `checked={field}`。

相关组件

- [switch.md](./switch.md)

RML 未覆盖的 API

`.indeterminate()` 等 gpui-component 方法需 Rust 手写。