diff --git a/packages/designer/src/document/node/node-children.ts b/packages/designer/src/document/node/node-children.ts index dc6bd2aac..ed6c16f50 100644 --- a/packages/designer/src/document/node/node-children.ts +++ b/packages/designer/src/document/node/node-children.ts @@ -313,9 +313,10 @@ export class NodeChildren { return; } const callbacks = owner.componentMeta.getMetadata().experimental?.callbacks; - if (callbacks?.onSubtreeModified) { + if (callbacks?.onSubtreeModified && options?.type !== 'insert') { try { - callbacks?.onSubtreeModified.call(node, owner, options); + // 此处传入的 owner节点需要对getChildren进行处理,兼容老的数据结构 + callbacks?.onSubtreeModified.call(node, owner.getVisionCapabledNode(), options); } catch (e) { console.error('error when excute experimental.callbacks.onNodeAdd', e); } @@ -323,7 +324,7 @@ export class NodeChildren { if (callbacks?.onNodeAdd && options?.type === 'insert') { try { - callbacks?.onNodeAdd.call(owner, node, owner); + callbacks?.onNodeAdd.call(owner, node.getVisionCapabledNode(), owner); } catch (e) { console.error('error when excute experimental.callbacks.onNodeAdd', e); } diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index b6f0ed4c3..c135fcb9b 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -818,6 +818,33 @@ export class Node { toString() { return this.id; } + + /** + * 慎用,可能有极端未知后果 + * @deprecated + */ + getVisionCapabledNode() { + // 判断是否已经是 nodeForVision + if (!this.isVisionNode) { + const children = this.getChildren(); + this.getChildren = () => { + return children?.getChildrenArray() || []; + }; + this.getProps = () => { + const props = this.props.export(); + props.getPropValue = (key) => { + return this.props.getPropValue(key); + }; + props.getNode = () => { + return this; + }; + return props; + }; + this.isVisionNode = true; + } + return this; + } + } export interface ParentalNode extends Node { diff --git a/packages/designer/src/document/node/props/props.ts b/packages/designer/src/document/node/props/props.ts index 19b8b30c7..8393dad75 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -335,10 +335,7 @@ export class Props implements IPropParent { * 兼容vision体系 */ getNode() { - const nodeForVision = this.owner; - nodeForVision.getChildren = () => { - return this.owner?.getChildren()?.getChildrenArray() || []; - }; + const nodeForVision = this.owner?.getVisionCapabledNode(); return nodeForVision; } }