# `bricks.Conform` 技术文档 > 一个基于 `bricks.PopupWindow` 的确认对话框类,用于展示消息并提供“确认”与“取消”操作选项。 --- ## 概述 `bricks.Conform` 是 `bricks` UI 框架中的一个模态弹窗组件,继承自 `bricks.PopupWindow`。它被设计用于在用户执行关键操作前进行确认,例如删除数据或提交表单。该组件自动显示,并包含可自定义的确认/取消按钮,支持国际化文本和事件回调。 --- ## 类定义 ```javascript class bricks.Conform extends bricks.PopupWindow ``` --- ## 构造函数 ### `constructor(opts)` 初始化一个 `Conform` 实例。 #### 参数 | 参数 | 类型 | 描述 | |------|------|------| | `opts` | Object | 配置选项对象,继承自 `PopupWindow` 并扩展以下属性: | ##### 扩展配置项 (`opts`) | 属性 | 类型 | 默认值 | 描述 | |------|------|--------|------| | `message` | String | 必填 | 要显示的消息内容,支持换行和国际化(i18n)。 | | `timeout` | Number | `0` (自动覆盖为 0) | 弹窗自动关闭时间(毫秒),此组件中强制设为 `0`,即不自动关闭。 | | `auto_open` | Boolean | `true` (自动设置) | 是否在创建后立即打开弹窗,此处固定为 `true`。 | | `conform` | Object | 可选 | “确认”按钮的自定义配置,如标签、事件等。 | | `discard` | Object | 可选 | “取消”按钮的自定义配置。 | > ⚠️ 注意:构造函数内部会强制设置 `opts.timeout = 0` 和 `opts.auto_open = true`,以确保用户必须手动选择操作。 #### 示例 ```javascript var confirmDialog = new bricks.Conform({ message: "确定要删除此文件吗?", conform: { label: "删除", handler: function(){ console.log("已确认"); } }, discard: { label: "保留" } }); ``` --- ## 方法说明 ### `create_conform()` 创建主容器布局并将消息区域与工具栏添加进去。 - 使用 `VBox` 布局占满整个窗口。 - 调用 `create_message()` 和 `create_toolbar()` 分别构建内容区与操作区。 - 将整体布局通过 `add_widget()` 添加到弹窗中。 --- ### `create_message(widget)` 创建消息显示区域,支持长文本滚动和居中对齐。 #### 参数 | 参数 | 类型 | 描述 | |------|------|------| | `widget` | `bricks.VBox` | 容器部件,用于承载消息内容。 | #### 内部结构 1. 创建一个 `Filler` 占位符,允许内容拉伸填充。 2. 在 `Filler` 中嵌入 `VScrollPanel` 支持垂直滚动。 3. 添加 `Text` 组件显示消息: - 启用文本换行 (`wrap: true`) - 水平居中对齐 (`halign: 'middle'`) - 支持国际化 (`i18n: true`) --- ### `create_toolbar(widget)` 创建底部操作工具栏,包含“确认”和“取消”两个按钮。 #### 参数 | 参数 | 类型 | 描述 | |------|------|------| | `widget` | `bricks.VBox` | 容器部件,用于添加工具栏。 | #### 工具栏配置 使用 `bricks.IconTextBar` 创建图标+文字按钮栏: | 按钮名称 | 图标 | 默认标签 | 自定义来源 | |---------|------|----------|------------| | `conform` | `imgs/conform.svg` | "Conform" | `this.opts.conform` | | `discard` | `imgs/cancel.svg` | "Discard" | `this.opts.discard` | > ✅ 所有自定义属性将通过 `bricks.extend()` 合并到默认配置中。 #### 事件绑定 - `conform` → 触发 `conform_hndl` - `discard` → 触发 `discard_hndl` --- ### `conform_hndl(event)` “确认”按钮点击处理函数。 #### 行为 1. 调用 `this.dismiss()` 关闭弹窗。 2. 触发名为 `'conformed'` 的自定义事件,供外部监听。 #### 示例监听 ```javascript confirmDialog.on('conformed', function(){ // 执行确认逻辑 }); ``` --- ### `discard_hndl(event)` “取消”按钮点击处理函数。 #### 行为 1. 调用 `this.dismiss()` 关闭弹窗。 2. 触发名为 `'cancelled'` 的自定义事件。 #### 示例监听 ```javascript confirmDialog.on('cancelled', function(){ // 执行取消后的逻辑 }); ``` --- ## 事件列表 | 事件名 | 触发时机 | 携带数据 | |-------|----------|--------| | `conformed` | 用户点击“确认”按钮后 | 无 | | `cancelled` | 用户点击“取消”按钮后 | 无 | 可通过 `.on(event, handler)` 或 `.bind(event, handler)` 注册监听。 --- ## 注册信息 ```javascript bricks.Factory.register('Conform', bricks.Conform); ``` - 通过工厂模式注册名称为 `'Conform'` 的可实例化组件。 - 可通过 `bricks.Factory.create('Conform', options)` 动态创建实例。 --- ## 布局结构图 ```plaintext PopupWindow └── VBox (100% x 100%) ├── Filler │ └── VScrollPanel │ └── Text (消息内容) └── IconTextBar ├── [✔] Conform 按钮 └── [✖] Discard 按钮 ``` --- ## 样式与资源依赖 - **图标资源路径**: - 确认图标:`bricks_resource('imgs/conform.svg')` - 取消图标:`bricks_resource('imgs/cancel.svg')` - 使用 `i18n: true`,需配合国际化语言包解析多语言文本。 --- ## 使用建议 ✅ 推荐场景: - 删除、覆盖、退出等危险操作前的二次确认。 - 需要用户明确响应的操作流程中断点。 ❌ 不适用场景: - 非阻塞性提示(应使用 Toast 或 Banner)。 - 需长时间停留的信息展示(考虑使用普通窗口)。 --- ## 完整示例 ```javascript var dialog = new bricks.Conform({ message: "您确定要退出编辑模式吗?未保存的内容将会丢失。", conform: { label: "退出", style: "danger" }, discard: { label: "继续编辑" } }); dialog.on('conformed', function(){ window.location.href = "/home"; }); dialog.on('cancelled', function(){ console.log("用户选择保留"); }); ``` --- ## 版本信息 - **框架版本**:`bricks.js` - **组件作者**:未知(基于命名空间推断) - **最后更新**:根据代码逻辑推断为现代 ES6+ 风格实现 --- 📌 *文档生成于:2025年4月*