Fix:修复删除含有子节点的节点时,data_change_detail事件报错
This commit is contained in:
parent
cd7936a50b
commit
b5cfca848a
@ -177,48 +177,55 @@ class Command {
|
|||||||
|
|
||||||
// 派发思维导图更新明细事件
|
// 派发思维导图更新明细事件
|
||||||
emitDataUpdatesEvent(lastData, data) {
|
emitDataUpdatesEvent(lastData, data) {
|
||||||
// 如果data_change_detail没有监听者,那么不进行计算,节省性能
|
try {
|
||||||
const eventName = 'data_change_detail'
|
// 如果data_change_detail没有监听者,那么不进行计算,节省性能
|
||||||
const count = this.mindMap.event.listenerCount(eventName)
|
const eventName = 'data_change_detail'
|
||||||
if (count > 0 && lastData && data) {
|
const count = this.mindMap.event.listenerCount(eventName)
|
||||||
const lastDataObj = simpleDeepClone(transformTreeDataToObject(lastData))
|
if (count > 0 && lastData && data) {
|
||||||
const dataObj = simpleDeepClone(transformTreeDataToObject(data))
|
const lastDataObj = simpleDeepClone(transformTreeDataToObject(lastData))
|
||||||
const res = []
|
const dataObj = simpleDeepClone(transformTreeDataToObject(data))
|
||||||
const walkReplace = (root, obj) => {
|
const res = []
|
||||||
if (root.children && root.children.length > 0) {
|
const walkReplace = (root, obj) => {
|
||||||
root.children.forEach((childUid, index) => {
|
if (root.children && root.children.length > 0) {
|
||||||
root.children[index] = obj[childUid]
|
root.children.forEach((childUid, index) => {
|
||||||
walkReplace(root.children[index], obj)
|
root.children[index] =
|
||||||
})
|
typeof childUid === 'string'
|
||||||
|
? obj[childUid]
|
||||||
|
: obj[childUid.data.uid]
|
||||||
|
walkReplace(root.children[index], obj)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return root
|
||||||
}
|
}
|
||||||
return root
|
// 找出新增的或修改的
|
||||||
|
Object.keys(dataObj).forEach(uid => {
|
||||||
|
// 新增的或已经存在的,如果数据发生了改变
|
||||||
|
if (!lastDataObj[uid]) {
|
||||||
|
res.push({
|
||||||
|
action: 'create',
|
||||||
|
data: walkReplace(dataObj[uid], dataObj)
|
||||||
|
})
|
||||||
|
} else if (!isSameObject(lastDataObj[uid], dataObj[uid])) {
|
||||||
|
res.push({
|
||||||
|
action: 'update',
|
||||||
|
oldData: walkReplace(lastDataObj[uid], lastDataObj),
|
||||||
|
data: walkReplace(dataObj[uid], dataObj)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// 找出删除的
|
||||||
|
Object.keys(lastDataObj).forEach(uid => {
|
||||||
|
if (!dataObj[uid]) {
|
||||||
|
res.push({
|
||||||
|
action: 'delete',
|
||||||
|
data: walkReplace(lastDataObj[uid], lastDataObj)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
this.mindMap.emit(eventName, res)
|
||||||
}
|
}
|
||||||
// 找出新增的或修改的
|
} catch (error) {
|
||||||
Object.keys(dataObj).forEach(uid => {
|
this.mindMap.opt.errorHandler && this.mindMap.opt.errorHandler(error)
|
||||||
// 新增的或已经存在的,如果数据发生了改变
|
|
||||||
if (!lastDataObj[uid]) {
|
|
||||||
res.push({
|
|
||||||
action: 'create',
|
|
||||||
data: walkReplace(dataObj[uid], dataObj)
|
|
||||||
})
|
|
||||||
} else if (!isSameObject(lastDataObj[uid], dataObj[uid])) {
|
|
||||||
res.push({
|
|
||||||
action: 'update',
|
|
||||||
oldData: walkReplace(lastDataObj[uid], lastDataObj),
|
|
||||||
data: walkReplace(dataObj[uid], dataObj)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
// 找出删除的
|
|
||||||
Object.keys(lastDataObj).forEach(uid => {
|
|
||||||
if (!dataObj[uid]) {
|
|
||||||
res.push({
|
|
||||||
action: 'delete',
|
|
||||||
data: walkReplace(lastDataObj[uid], lastDataObj)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
})
|
|
||||||
this.mindMap.emit(eventName, res)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user