diff --git a/packages/designer/src/document/node/node.ts b/packages/designer/src/document/node/node.ts index 8d7d93d61..3cf491a19 100644 --- a/packages/designer/src/document/node/node.ts +++ b/packages/designer/src/document/node/node.ts @@ -157,10 +157,17 @@ export class Node { } private initialChildren(children: any): NodeData[] { + // FIXME! this is dirty code if (children == null) { - return this.componentMeta.getMetadata().experimental?.initialChildren || []; + const initialChildren = this.componentMeta.getMetadata().experimental?.initialChildren; + if (initialChildren) { + if (typeof initialChildren === 'function') { + return initialChildren(this as any) || []; + } + return initialChildren; + } } - return children; + return children || []; } isContainer(): boolean { diff --git a/packages/globals/src/types/metadata.ts b/packages/globals/src/types/metadata.ts index 76057faf4..64e3e831f 100644 --- a/packages/globals/src/types/metadata.ts +++ b/packages/globals/src/types/metadata.ts @@ -54,7 +54,7 @@ export interface Experimental { initials?: InitialItem[]; callbacks?: Callbacks; // TODO: thinkof function - initialChildren?: NodeData[]; + initialChildren?: NodeData[] | ((target: SettingTarget) => NodeData[]); // 样式 及 位置,handle上必须有明确的标识以便事件路由判断,或者主动设置事件独占模式 // NWSE 是交给引擎计算放置位置,ReactElement 必须自己控制初始位置 diff --git a/packages/vision-polyfill/src/bundle/upgrade-metadata.ts b/packages/vision-polyfill/src/bundle/upgrade-metadata.ts index 0bc665836..2c3ff2830 100644 --- a/packages/vision-polyfill/src/bundle/upgrade-metadata.ts +++ b/packages/vision-polyfill/src/bundle/upgrade-metadata.ts @@ -568,7 +568,7 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { if (snippets) { experimental.snippets = snippets.map(data => { const { schema = {} } = data; - if (initialChildren && !schema.children) { + if (!schema.children && initialChildren && typeof initialChildren !== 'function') { schema.children = initialChildren; } return { @@ -596,7 +596,9 @@ export function upgradeMetadata(oldConfig: OldPrototypeConfig) { } } if (initialChildren) { - experimental.initialChildren = initialChildren; + experimental.initialChildren = typeof initialChildren === 'function' ? (field: Field) => { + return initialChildren.call(field, (field as any).props); + } : initialChildren; } if (view) { experimental.view = view;