# Popup 弹窗控件,用于在页面上显示浮动的对话框或内容窗口。属于**容器控件**,继承自 `bricks.VBox`。 ## 主要方法 - `open()`:打开弹窗,设置位置、显示样式,并触发 `opened` 事件。 - `dismiss()`:关闭弹窗,隐藏其 DOM 元素,并可选择自动销毁。 - `destroy()`:彻底销毁该弹窗实例,从父容器中移除并清理资源。 - `add_widget(w, i)`:向弹窗内容区域添加子控件。 - `remove_widget(w)`:从内容区域移除指定子控件。 - `clear_widgets()`:清空内容区域的所有子控件。 - `bring_to_top()`:将当前弹窗置于所有其他弹窗之上(通过提升 z-index)。 - `positify_tl()`:根据锚点(archor)和屏幕尺寸计算并设置弹窗初始位置。 - `popup_from_widget(from_w)`:相对于某个源控件定位弹窗(常用于下拉菜单等场景)。 - `load_content()`:异步加载 `content` 配置中的组件并渲染到内容区。 ## 主要事件 - `opened`:弹窗打开后触发。 - `dismissed`:弹窗关闭时触发。 - `destroy`:弹窗被销毁时触发(仅当 `auto_destroy` 为 true 时)。 ## 源码例子 ```json { "id": "my_popup", "widgettype": "Popup", "options": { "width": "400px", // 弹窗宽度 "height": "300px", // 弹窗高度 "archor": "cc", // 居中显示:'cc' 表示 center-center "modal": true, // 是否模态,模态时背景不可点击 "movable": true, // 是否允许拖动 "resizable": true, // 是否允许调整大小 "auto_open": false, // 是否创建后自动打开 "auto_dismiss": true, // 点击外部是否自动关闭 "auto_destroy": true, // 关闭后是否自动销毁 "timeout": 5000, // 自动关闭延时(毫秒),0 表示不启用 "content": { // 要加载的内容(支持嵌套控件) "widgettype": "VBox", "options": { "padding": "20px", "css": "popup-content" }, "subwidgets": [ { "widgettype": "Text", "options": { "text": "这是一个弹窗示例!", "i18n": true } }, { "widgettype": "Button", "options": { "text": "关闭", "css": "primary" }, "binds": [ { "actiontype": "event", "wid": "close_btn", "event": "click", "target": "my_popup", "dispatch_event": "dismissed" } ] } ] } }, "binds": [ { "actiontype": "method", "wid": "trigger_button", // 触发控件 ID "event": "click", // 监听点击事件 "target": "my_popup", // 目标是此弹窗 "method": "open", // 执行 open 方法 "params": {} }, { "actiontype": "event", "wid": "my_popup", "event": "dismissed", "target": "status_text", "dispatch_event": "setValue", "params": { "value": "弹窗已关闭" } } ] } ``` > ✅ **注释说明**: > - 此弹窗不会自动打开(`auto_open: false`),需由按钮触发。 > - 点击“关闭”按钮会派发 `dismissed` 事件,进而触发状态更新。 > - 使用 `content` 字段定义内部结构,支持动态构建复杂界面。 > - 支持国际化文本(`i18n: true`)、拖拽、缩放、模态遮罩等功能。 --- # PopupWindow 带标题栏的可操作窗口型弹窗控件,适用于桌面风格的应用程序窗口管理。属于**容器控件**,继承自 `bricks.Popup`。 ## 主要方法 - `open()`:打开窗口,若设置了自动打开则延迟执行。 - `build_title_bar()`:构建顶部标题栏(含图标、工具按钮等)。 - `win_minimize()`:最小化窗口(实际是关闭但保留引用供恢复)。 - `set_title(txt)`:动态设置窗口标题。 - `destroy()`:销毁窗口,同时从全局管理列表中移除。 ## 主要事件 - `opened`:窗口打开时触发。 - `dismissed`:窗口关闭(最小化)时触发。 - `destroy`:窗口被彻底销毁时触发。 ## 源码例子 ```json { "id": "app_window", "widgettype": "PopupWindow", "options": { "title": "我的应用", // 窗口标题 "icon": "/resources/icons/app.png", // 标题栏左侧图标路径 "width": "60%", // 宽度百分比 "height": "70%", // 高度百分比 "movable": true, // 可拖动标题栏移动 "resizable": true, // 可调整大小 "modal": false, // 非模态,允许后台交互 "auto_open": true // 创建即打开 }, "subwidgets": [ { "widgettype": "HtmlView", "options": { "html": "