Fix:修复某些场景(搜索全部替换等)下节点状态未更新的问题,节点实例新增了数据快照的属性
This commit is contained in:
parent
cd28be4b01
commit
ca40204d43
@ -23,6 +23,8 @@ class MindMapNode {
|
|||||||
this.opt = opt
|
this.opt = opt
|
||||||
// 节点数据
|
// 节点数据
|
||||||
this.nodeData = this.handleData(opt.data || {})
|
this.nodeData = this.handleData(opt.data || {})
|
||||||
|
// 保存本次更新时的节点数据快照
|
||||||
|
this.nodeDataSnapshot = ''
|
||||||
// uid
|
// uid
|
||||||
this.uid = opt.uid
|
this.uid = opt.uid
|
||||||
// 控制实例
|
// 控制实例
|
||||||
@ -789,9 +791,12 @@ class MindMapNode {
|
|||||||
if (this.updateUserListNode) this.updateUserListNode()
|
if (this.updateUserListNode) this.updateUserListNode()
|
||||||
// 更新节点位置
|
// 更新节点位置
|
||||||
let t = this.group.transform()
|
let t = this.group.transform()
|
||||||
// 如果节点位置没有变化,则返回
|
// 保存一份当前节点数据快照
|
||||||
if (this.left === t.translateX && this.top === t.translateY) return
|
this.nodeDataSnapshot = JSON.stringify(this.getData())
|
||||||
this.group.translate(this.left - t.translateX, this.top - t.translateY)
|
// 节点位置变化才更新,因为即使值没有变化属性设置操作也是耗时的
|
||||||
|
if (this.left !== t.translateX || this.top !== t.translateY) {
|
||||||
|
this.group.translate(this.left - t.translateX, this.top - t.translateY)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 获取节点相当于画布的位置
|
// 获取节点相当于画布的位置
|
||||||
|
|||||||
@ -91,6 +91,18 @@ class Base {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 节点节点数据是否发生了改变
|
||||||
|
checkIsNodeDataChange(lastData, curData) {
|
||||||
|
if (lastData) {
|
||||||
|
// 对比忽略激活状态和展开收起状态
|
||||||
|
lastData = typeof lastData === 'string' ? JSON.parse(lastData) : lastData
|
||||||
|
lastData.isActive = curData.isActive
|
||||||
|
lastData.expand = curData.expand
|
||||||
|
lastData = JSON.stringify(lastData)
|
||||||
|
}
|
||||||
|
return lastData !== JSON.stringify(curData)
|
||||||
|
}
|
||||||
|
|
||||||
// 创建节点实例
|
// 创建节点实例
|
||||||
createNode(data, parent, isRoot, layerIndex, index, ancestors) {
|
createNode(data, parent, isRoot, layerIndex, index, ancestors) {
|
||||||
// 编号
|
// 编号
|
||||||
@ -106,6 +118,7 @@ class Base {
|
|||||||
// 数据上保存了节点引用,那么直接复用节点
|
// 数据上保存了节点引用,那么直接复用节点
|
||||||
if (data && data._node && !this.renderer.reRender) {
|
if (data && data._node && !this.renderer.reRender) {
|
||||||
newNode = data._node
|
newNode = data._node
|
||||||
|
// 节点层级改变了
|
||||||
const isLayerTypeChange = this.checkIsLayerTypeChange(
|
const isLayerTypeChange = this.checkIsLayerTypeChange(
|
||||||
newNode.layerIndex,
|
newNode.layerIndex,
|
||||||
layerIndex
|
layerIndex
|
||||||
@ -127,10 +140,17 @@ class Base {
|
|||||||
newNumberStr
|
newNumberStr
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
// 主题或主题配置改变了、节点层级改变了,需要重新渲染节点文本等情况需要重新计算节点大小和布局
|
// 主题或主题配置改变了
|
||||||
const isNeedResizeSources = this.checkIsNeedResizeSources()
|
const isResizeSource = this.checkIsNeedResizeSources()
|
||||||
|
// 节点数据改变了
|
||||||
|
const isNodeDataChange = this.checkIsNodeDataChange(
|
||||||
|
data._node.nodeDataSnapshot,
|
||||||
|
data.data
|
||||||
|
)
|
||||||
|
// 重新计算节点大小和布局
|
||||||
if (
|
if (
|
||||||
isNeedResizeSources ||
|
isResizeSource ||
|
||||||
|
isNodeDataChange ||
|
||||||
isLayerTypeChange ||
|
isLayerTypeChange ||
|
||||||
newNode.getData('resetRichText') ||
|
newNode.getData('resetRichText') ||
|
||||||
isNumberChange
|
isNumberChange
|
||||||
@ -138,7 +158,7 @@ class Base {
|
|||||||
newNode.getSize()
|
newNode.getSize()
|
||||||
newNode.needLayout = true
|
newNode.needLayout = true
|
||||||
}
|
}
|
||||||
this.checkGetGeneralizationChange(newNode, isNeedResizeSources)
|
this.checkGetGeneralizationChange(newNode, isResizeSource)
|
||||||
} else if (
|
} else if (
|
||||||
(this.lru.has(uid) || this.renderer.lastNodeCache[uid]) &&
|
(this.lru.has(uid) || this.renderer.lastNodeCache[uid]) &&
|
||||||
!this.renderer.reRender
|
!this.renderer.reRender
|
||||||
@ -150,6 +170,7 @@ class Base {
|
|||||||
newNode = this.lru.get(uid) || this.renderer.lastNodeCache[uid]
|
newNode = this.lru.get(uid) || this.renderer.lastNodeCache[uid]
|
||||||
// 保存该节点上一次的数据
|
// 保存该节点上一次的数据
|
||||||
const lastData = JSON.stringify(newNode.getData())
|
const lastData = JSON.stringify(newNode.getData())
|
||||||
|
// 节点层级改变了
|
||||||
const isLayerTypeChange = this.checkIsLayerTypeChange(
|
const isLayerTypeChange = this.checkIsLayerTypeChange(
|
||||||
newNode.layerIndex,
|
newNode.layerIndex,
|
||||||
layerIndex
|
layerIndex
|
||||||
@ -167,8 +188,8 @@ class Base {
|
|||||||
data._node = newNode
|
data._node = newNode
|
||||||
// 主题或主题配置改变了需要重新计算节点大小和布局
|
// 主题或主题配置改变了需要重新计算节点大小和布局
|
||||||
const isResizeSource = this.checkIsNeedResizeSources()
|
const isResizeSource = this.checkIsNeedResizeSources()
|
||||||
// 主题或主题配置改变了、节点层级改变了,需要重新渲染节点文本,节点数据改变了等情况需要重新计算节点大小和布局
|
// 点数据改变了
|
||||||
const isNodeDataChange = lastData !== JSON.stringify(data.data)
|
const isNodeDataChange = this.checkIsNodeDataChange(lastData, data.data)
|
||||||
// 判断编号是否改变
|
// 判断编号是否改变
|
||||||
let isNumberChange = false
|
let isNumberChange = false
|
||||||
if (hasNumberPlugin) {
|
if (hasNumberPlugin) {
|
||||||
@ -177,6 +198,7 @@ class Base {
|
|||||||
newNumberStr
|
newNumberStr
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
// 重新计算节点大小和布局
|
||||||
if (
|
if (
|
||||||
isResizeSource ||
|
isResizeSource ||
|
||||||
isNodeDataChange ||
|
isNodeDataChange ||
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user