跳到主要内容

扩展加载

加载与依赖项

扩展允许有一个或多个依赖,一个扩展依赖的全部扩展必须先序于该扩展被加载。如果两个扩展之间没有直接或间接的依赖关系,那两个扩展的加载顺序是随机的。

加载模式

扩展的加载模式分为主动加载和被动加载,其在编辑器中的卸载行为不同。

主动加载是编辑器或用户主动的要求加载某一个扩展;而在加载某一个扩展时,如果该扩展存在依赖,那么其依赖被隐式加载的行为称为被动加载。

如果一个扩展在加载链中即是主动加载也是被动加载,那么其加载模式为主动加载。

如果一个扩展被被动加载了,那么他不应当被主动卸载。

加载序与卸载序

当一个扩展被加载时,其所有的依赖项必须先序于该扩展被加载,并且其所有的依赖项均为被动加载模式。

当一个扩展被卸载时,其所有的非主动加载模式的依赖项均后序于该扩展被卸载,所有依赖该扩展的扩展均先序于该扩展被卸载。

事件响应

扩展响应一个具体事件通过编辑器直接调用插件的相关方法,如对于调用扩展 A 的 onInit 事件,即直接调用 a.onInit(),其中 a 表示扩展 A 的一个实例。

当扩展实例没有定义某一个事件的时候,编辑器调用该事件时不给出警告或错误,而应该跳过对其的调用。例如,如果某个扩展不存在 onInit 事件,那么这个扩展也应当被正常加载,但不会响应 onInit 事件。

下面是扩展的全部事件及对其的解释:

onInit():当插件被启用时触发。在这个事件中,扩展应当完成对编辑器内容的添加。

beforeProjectLoadExtension(data, extensions):在编辑器加载一个项目文件时,该事件在加载项目所需的扩展之前被触发,这个事件会被发送到所有的插件,无论是否被加载。

beforeProjectLoad(data, extensions):当编辑器在加载一个项目时,触发这个事件。参数 data 表示当前项目的数据,参数 extensions 表示当前项目所需要的扩展。在这个事件中,扩展应当完成对旧版本项目的替换,以保证其适合新版本。请注意,如果原项目和当前环境完全一致,这个事件依然会被触发,此时扩展不应当修改该项目。扩展中的这一事件应当提供判断,保证版本迁移的正确性。

beforeProjectSave(data):当编辑器在保存一个项目时,触发这个事件。参数 data 表示当前项目的数据。

onUninit():当插件被禁用时触发。在这个事件中,扩展应当完成对添加到编辑器的内容的删除。