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

140 lines
4.2 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.

# MarkdownViewer
用于展示 Markdown 格式内容的容器控件,支持从本地文本或远程 URL 加载 Markdown 内容,并具备浏览历史回退功能。该控件继承自 `VBox`,属于**容器控件**。
## 主要方法
- `build()`
异步方法,用于初始化加载由 `opts.md_url` 指定的 Markdown 内容。
- `_build(md_url)`
异步私有方法,根据传入的 URL 请求并渲染 Markdown 内容到界面中。
- `createBackButton()`
创建一个返回按钮(“<<<<<<<”),点击后可返回上一个浏览过的 Markdown 页面。
- `add_back_stack(event)`
将当前页面的 URL 压入浏览历史栈(`back_stack`)中,用于实现“后退”功能。
- `go_back(event)`
异步方法,弹出当前和上一个 URL然后加载再上一级的内容实现浏览器式的“返回”操作。
- `show_scroll(event)`
滚动事件监听函数,调试用,输出当前窗口滚动位置。
## 主要事件
- `'loaded'`
当 Markdown 内容成功加载并解析完成后触发,携带参数 `{ url: 当前加载的URL }`
- `'scroll'`
监听容器滚动行为,触发 `show_scroll` 函数进行调试输出。
## 源码例子
```json
{
"id": "md_viewer_1",
"widgettype": "MarkdownViewer",
"options": {
"navigator": true, // 显示返回按钮
"md_url": "/docs/intro.md", // 从服务器加载 Markdown 文件
"method": "GET", // HTTP 方法
"params": {} // 请求参数(无)
},
"subwidgets": [], // 此控件内部管理子控件,无需手动定义
"binds": [
{
"actiontype": "bricks",
"wid": "md_viewer_1",
"event": "loaded",
"target": "Popup",
"rtdata": {
"msg": "文档已加载完成!"
},
"actiontype": "script",
"script": "console.log('Markdown loaded:', params.url);",
"params": {
"url": "{event.params.url}"
}
}
]
}
```
> **注释说明:**
> - 使用 `MarkdownViewer` 控件时,只需提供 `md_url` 或 `mdtext` 即可自动渲染 Markdown。
> - 若启用 `navigator: true`,则会显示一个简单的返回按钮,支持浏览历史回退。
> - `binds` 中监听了 `loaded` 事件,在内容加载完成后执行脚本打印日志。
> - 支持 Markdown 中的链接跳转,点击链接会动态加载新页面并记录历史。
---
# MdWidget
基础 Markdown 渲染控件,用于将 Markdown 文本转换为 HTML 并显示在页面上。它是一个普通控件,继承自 `JsWidget`
## 主要方法
- `set_content(content)`
设置新的 Markdown 内容并重新渲染。
- `_build(md_url)`
异步方法,通过 AJAX 获取指定 URL 的 Markdown 内容并渲染。
- `_build1()`
使用 `marked.parse()``this.md_content` 转换为 HTML 并插入 DOM。
- `getValue()`
返回当前控件的数据对象,格式为 `{ 控件名: markdown内容 }`,用于表单提交等场景。
- `setValue(v)`
设置 Markdown 内容值(可用于动态更新内容)。
- `getname()`
获取控件名称,若未设置则默认为 `'mdtext'`
## 主要事件
- `'loaded'`
成功加载远程 Markdown 文件后触发,携带参数 `{ url: 加载的文件地址 }`
## 源码例子
```json
{
"id": "md_widget_simple",
"widgettype": "MdWidget",
"options": {
"mdtext": "# 欢迎使用 Bricks\\n\\n这是一个内联 Markdown 示例。\\n\\n- 功能一\\n- 功能二"
},
"binds": [
{
"actiontype": "event",
"wid": "md_widget_simple",
"event": "click",
"target": "md_widget_simple",
"dispatch_event": "content_clicked",
"params": {
"info": "用户点击了 Markdown 区域"
}
}
]
}
```
> **注释说明:**
> - 此例使用内联字符串 `mdtext` 直接嵌入 Markdown 内容。
> - 绑定了 `click` 事件,当用户点击渲染后的 Markdown 区域时,派发自定义事件 `content_clicked`。
> - 可与其它控件通信,例如通知父组件用户交互行为。
---
> 💡 **提示:**
> 使用这两个控件前,请确保已引入 `marked.js`
>
> ```html
> <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
> ```
>
> 否则 `marked.parse is not a function` 错误将导致渲染失败。