You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

48 lines
2.0 KiB

4 years ago
# 常见场景汇总
## 格式化数据方法
1. `BI.Tree.transformToTreeFormat(nodes)` 将id,pId结构的列表形式转化为id,children形式的类树结构
2. `BI.Tree.transformToArrayFormat(nodes,pId)` 将id,children形式的类树结构转化为id,pId结构的列表形式
3. `BI.Tree.traversal(nodes,callback)` 递归遍历id,children形式的树结构,深度优先
## layer层级的判断方法
通常我们用`layer`属性标明当前节点的层级(第一层为0),对于异步加载的树,我们可以在`itemsCreator`回掉的参数中获取当前父节点的详细信息,子节点的`layer`增加1级即可
对于非异步的完整的节点数据,可以采用递归的方式
```javascript
traversalLayers: function (items, layer) {
var self = this;
BI.each(items, function (index, item) {
item.layer = layer;
if (item.children) {
self.traversalLayers(item.children, layer + 1)
}
})
}
```
利用`BI.Tree.traversal(nodes,callback)`会更方便(2020-09版本可用)
```javascript
traversalLayers: function (items) {
BI.Tree.traversal(items, function (index, node, pNode) {
node.layer = pNode ? pNode.layer + 1 : 0
});
return items
}
```
## 多层级性能优化
对于`bi.button_tree`的默认单选逻辑来说,多层级+多节点会出现指数级性能隐患,因此适用于数据量比较小的场景,如果针对部门职务树等超大数据场景,建议采用外部控制选中状态的方式
首先`bi.custom_tree`的props中el属性里面嵌套的`bi.button_tree`的`chooseType`要置为-1,即不控制任何选中逻辑.
而后对`bi.custom_tree`添加事件监听,调用`setValue`由外部赋值
```javascript
listeners: [
{
eventName: BI.Controller.EVENT_CHANGE,
action: function (type, value) {
if (type === BI.Events.CLICK) {
this.setValue(value);
}
},
},
],
```