4.4 KiB
4.4 KiB
以下是根据你提供的源码和文档规范,为 Tree 控件编写的符合 bricks 控件 JSON 规范 的控件文档(Markdown 格式):
Tree
树形结构控件,用于展示层级数据(如文件目录、组织架构等)。支持异步加载子节点、节点选择、自定义节点视图等功能。属于容器控件,继承自 VScrollPanel。
主要方法
| 方法名 | 说明 |
|---|---|
getValue() |
获取整个树的数据结构,包含所有节点及其子节点的用户数据。 |
get_children_data(node) |
异步从服务器获取指定节点的子节点数据(当配置了 dataurl 时调用)。 |
create_node_children(node, data) |
根据传入的数据数组创建子节点并添加到指定父节点下。 |
build_subnode(node, data) |
创建单个 TreeNode 实例并加入容器中。 |
node_click_handle(node, event) |
处理节点点击事件,更新选中状态并派发 node_selected 事件。 |
node_selected(node, flag) |
设置节点的选中样式,并派发 node_selected 自定义事件。 |
append_new_subnode(parentNode, data) |
向指定父节点追加新子节点,并自动构建 UI。 |
主要事件
| 事件名 | 触发条件 | 携带参数 |
|---|---|---|
node_selected |
节点被点击选中或取消选中时触发 | 包含节点原始数据及 selected: true/false 的对象 |
check_changed |
当节点带有复选框且状态改变时触发(需启用 checkField) |
节点的用户数据对象 |
command |
工具栏按钮点击后触发(如果启用了工具栏) | 工具项的配置信息(name, label 等) |
源码例子
{
"id": "my_tree",
"widgettype": "Tree",
"options": {
// 控件基本属性
"width": "100%",
"height": "500px",
// 数据字段映射
"idField": "id", // 唯一标识字段
"textField": "name", // 显示文本字段
"is_leafField": "is_leaf", // 判断是否为叶子节点
"typeField": "nodetype", // 节点类型字段(用于图标区分)
// 行高设置
"row_height": "36px",
// 图标配置(可选)
"node_typeicons": {
"folder": {
"open": "/static/imgs/open-folder.svg",
"close": "/static/imgs/close-folder.svg",
"leaf": "/static/imgs/file.svg"
},
"default_type": "folder"
},
// 是否启用复选框功能
"checkField": "checked",
// 静态数据或远程数据 URL(二选一)
"data": [
{
"id": "1",
"name": "项目根目录",
"is_leaf": false,
"nodetype": "folder",
"children": [
{
"id": "2",
"name": "子模块A",
"is_leaf": true,
"nodetype": "file"
}
]
}
]
/*
或者使用远程数据:
"dataurl": "/api/tree/nodes",
"method": "GET",
"params": {
"appid": "123"
}
*/
},
// 子控件(无,因为 Tree 自主管理子节点)
"subwidgets": [],
// 事件绑定
"binds": [
{
"actiontype": "event",
"wid": "my_tree",
"event": "node_selected",
"target": "output_panel",
"rtdata": {
"action": "show_node_info"
},
"datawidget": "my_tree",
"datamethod": "getValue",
"dataparams": {}
},
{
"actiontype": "script",
"wid": "my_tree",
"event": "check_changed",
"target": "Popup",
"script": "console.log('节点勾选变化:', params); notifyUser(params.name + ' 状态已更新');",
"params": {
"source": "tree_check"
}
}
]
}
✅ 注释说明:
widgettype: 必须是已在bricks.Factory.register中注册的名称,此处为"Tree"。options.data: 提供初始静态数据;若使用dataurl,则会在运行时动态加载。checkField: 开启复选框功能,每个节点数据中应包含该字段(如"checked": true)。binds示例展示了如何监听节点选中与复选变化,并执行脚本或传递数据给其他组件。- 所有图标路径建议通过
bricks_resource()函数处理以确保资源定位正确。
📌 提示:若需编辑功能(增删改),请使用继承自
Tree的EditableTree或在options中提供editable配置及对应的add_url,delete_url,update_url接口地址。