mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-05-08 17:48:47 +00:00
补全方法的参数类型、返回值类型与详情说明,规范字段编辑器/字段配置/运行时 API 等文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
3.5 KiB
3.5 KiB
Node
Node 是 @tmagic/core 的节点基类,继承自 EventEmitter,表示 DSL 中的一个节点。
构造函数
new Node(options: NodeOptions)
NodeOptions
| 参数 | 类型 | 说明 |
|---|---|---|
config |
MNode |
节点配置 |
parent |
Node |
父节点(可选) |
page |
Page |
所属页面(可选) |
app |
App |
应用实例 |
属性
| 属性 | 类型 | 说明 |
|---|---|---|
data |
MNode |
节点配置数据 |
style |
object |
节点样式 |
events |
EventConfig[] |
事件配置 |
instance |
any |
组件实例 |
page |
Page | undefined |
所属页面 |
parent |
Node | undefined |
父节点 |
app |
App |
应用实例 |
store |
Store |
节点存储 |
eventKeys |
Map<string, symbol> |
事件键映射 |
实例方法
setData
-
参数:
{MNode} data节点数据
-
返回:
{void}
-
详情:
设置节点数据,会更新
data、style和events属性。 -
示例:
node.setData({
id: 'button_1',
type: 'button',
style: { width: 100 },
events: []
});
addEventToQueue
-
参数:
{EventCache} event待处理事件项;类型为{ method: string, fromCpt: any, args: any[] }
-
返回:
{void}
-
详情:
将事件添加到节点内部的事件队列,等待组件实例
mounted后再依次调用对应的方法(instance[event.method](event.fromCpt, ...event.args))。
setInstance
-
参数:
{any} instance组件实例
-
返回:
{void}
-
详情:
设置组件实例,并绑定队列中的事件。
-
示例:
// 通常在组件挂载时调用
node.setInstance(componentInstance);
registerMethod
::: warning @deprecated
该方法已废弃,请使用 setInstance 替代。
:::
-
参数:
{Methods} methods方法集合,形如{ [name: string]: (...args: any[]) => any }
-
返回:
{void}
-
详情:
将给定方法挂载到
instance上。如果当前instance不存在,会先创建一个空对象再合并方法。
runHookCode
-
参数:
{string} hook钩子名称(如'created'、'mounted'、'destroy'等,由节点 schema 决定){object} params参数(可选)
-
返回:
{Promise<void>}
-
详情:
执行节点的钩子代码。内部会根据节点 schema 中
hook字段的实际形态进行处理:- 兼容旧格式:当
data[hook]直接是函数时,作为函数调用; - 新格式:当
data[hook]是{ hookType, hookData[] }且hookType === HookType.CODE时,按顺序遍历hookData,根据codeType调用app.runCode或app.runDataSourceMethod。
- 兼容旧格式:当
-
示例:
await node.runHookCode('mounted', { data: someData });
destroy
-
返回:
{void}
-
详情:
销毁节点,清理事件监听和组件实例。
生命周期事件
Node 实例会触发以下生命周期事件:
| 事件名 | 说明 |
|---|---|
created |
组件创建完成时触发 |
mounted |
组件挂载完成时触发 |
destroy |
组件销毁时触发 |
update-data |
数据更新时触发 |
监听示例
node.on('mounted', () => {
console.log('组件已挂载');
});
node.on('update-data', (newData) => {
console.log('数据已更新', newData);
});