From 444e25cf2421fd17ed70af5d43a362362de1e75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=86=A0?= Date: Sun, 26 Jul 2020 14:56:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix:=20props.getNode=20=E9=98=B2=E6=AD=BB?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/designer/src/document/node/props/props.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/designer/src/document/node/props/props.ts b/packages/designer/src/document/node/props/props.ts index 19b8b30c7..d49a0e933 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -336,9 +336,14 @@ export class Props implements IPropParent { */ getNode() { const nodeForVision = this.owner; - nodeForVision.getChildren = () => { - return this.owner?.getChildren()?.getChildrenArray() || []; - }; + // 判断是否已经是 nodeForVision + if (!nodeForVision.isVisionNode) { + const children = nodeForVision.getChildren(); + nodeForVision.getChildren = () => { + return children?.getChildrenArray() || []; + }; + nodeForVision.isVisionNode = true; + } return nodeForVision; } } From da592355f4c3ec8306b605fe2aa8d7b6138d8630 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E7=86=A0?= Date: Sun, 26 Jul 2020 22:49:06 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E8=B0=83=E6=95=B4visionNode?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9C=AA=E7=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/document/node/node-children.ts | 7 ++--- packages/designer/src/document/node/node.ts | 27 +++++++++++++++++++ .../designer/src/document/node/props/props.ts | 10 +------ 3 files changed, 32 insertions(+), 12 deletions(-) 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 d49a0e933..8393dad75 100644 --- a/packages/designer/src/document/node/props/props.ts +++ b/packages/designer/src/document/node/props/props.ts @@ -335,15 +335,7 @@ export class Props implements IPropParent { * 兼容vision体系 */ getNode() { - const nodeForVision = this.owner; - // 判断是否已经是 nodeForVision - if (!nodeForVision.isVisionNode) { - const children = nodeForVision.getChildren(); - nodeForVision.getChildren = () => { - return children?.getChildrenArray() || []; - }; - nodeForVision.isVisionNode = true; - } + const nodeForVision = this.owner?.getVisionCapabledNode(); return nodeForVision; } }