bricks/docs/ai.old/button.md
2025-11-18 14:59:26 +08:00

92 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Button
按钮控件Button是 Bricks.js 框架中用于触发用户交互行为的**普通控件**,继承自 `bricks.Layout`。它通常用于提交表单、打开弹窗、执行脚本或导航等操作。Button 支持图标、文本标签、自定义样式以及事件绑定,适用于各种 UI 场景。
## 主要方法
- **`target_clicked(event)`**
内部方法,当按钮被点击时触发,阻止事件冒泡并派发 `click` 事件,同时处理配置的 `action` 行为。
- **`create()`**
创建底层 DOM 元素(`<button>` 标签),由框架自动调用。
- **`opts_setup()`**
初始化按钮内容:根据 `opts.icon``opts.label` 创建图标和文本子控件,并添加到布局中。
- **`add_widget(widget)`**
继承自父类,用于向按钮内部添加子控件(如 Icon 或 Text
- **`bind(event, handler)`**
绑定自定义事件处理器(例如 `'click'` 事件)。
## 主要事件
- **`click`**
当按钮被用户点击时触发。可通过 `binds` 配置监听此事件,并执行相应动作(如调用方法、跳转页面、发送请求等)。
## 源码例子
```json
{
"id": "btn_submit", // 控件唯一标识
"widgettype": "Button", // 控件类型Button
"options": {
"name": "btn_submit", // 按钮名称(用于 DOM ID 设置)
"label": "Submit", // 显示的文字标签(支持 i18n 国际化)
"icon": "icons/submit.png", // 图标路径(可选)
"color": "#ffffff", // 文字颜色
"bgcolor": "#007BFF", // 背景色
"item_rate": 1.2, // 图标与文字的比例系数
"orientation": "horizontal", // 布局方向horizontal(图标在左) / vertical
"css": "custom-btn", // 自定义 CSS 类名
"nonepack": false, // 是否去除默认 padding 和边框
"action": {
"actiontype": "method", // 点击后执行的动作类型
"wid": "form_main", // 目标组件 ID
"method": "submit", // 调用的方法名
"params": {} // 方法参数
}
},
"binds": [
{
"actiontype": "method", // 动作类型:调用方法
"wid": "btn_submit", // 触发组件 ID
"event": "click", // 监听事件:点击
"target": "form_main", // 目标组件 ID
"method": "validateAndSubmit", // 执行方法
"params": {
"showLoading": true
}
},
{
"actiontype": "script", // 执行脚本
"wid": "btn_submit",
"event": "click",
"target": "", // script 类型无需 target
"script": "console.log('Button clicked:', params);",
"params": {
"message": "Hello from Button!"
}
},
{
"actiontype": "event", // 派发自定义事件
"wid": "btn_submit",
"event": "click",
"target": "Popup", // 向弹窗系统派发事件
"dispatch_event": "open_dialog",
"params": {
"dialogId": "confirm_save"
}
}
]
}
```
> ✅ **注释说明:**
>
> - `widgettype: "Button"` 表示使用已注册的 Button 控件。
> - `options` 中的 `action` 是按钮内置的行为配置,也可通过 `binds` 实现更复杂的逻辑。
> - `binds` 数组允许一个按钮绑定多个不同类型的响应动作(方法调用、脚本执行、事件派发等)。
> - 图标和文本会自动按 `orientation` 排列,`item_rate` 控制大小比例。
> - 使用 `i18n: true`(隐式支持)时,`label` 可以从语言包中读取多语言值。
> - `nonepack: true` 可用于创建无边距/无背景的纯净按钮,适合嵌入工具栏等场景。