面板与扩展的通信

    最常见的例子就是某个面板被拖拽停靠到主窗口里。这时候面板会先关闭,然后在主窗口内重新打开,而面板上使用的内存里的数据如果不进行存储和备份,则会随着重启而丢失。

    这时候就需要与扩展主体进行一定程度的数据交互。

    在看这章节前,需要对 消息系统 有一定程度的了解。

    然后定义扩展的 main 文件 :

    1. exports.methods = {
    2. saveData(path, data) {
    3. // 收到数据后缓存起来
    4. this.cache[path] = data;
    5. queryData(path) {
    6. delete this.cache[path];
    7. return result;
    8. },
    9. };
    10. exports.load = function() {};

    然后定义面板的 main 文件:

    发送消息

    当定义好扩展和扩展里的面板后,就可以尝试触发这些消息。

    1. // default 可以省略,如果面板名字是非 default,则需要填写 'hello-world.xxx'
    2. Editor.Panel.open('hello-world');

    打开面板后,控制台会打印出一句:

    这是因为数据还没有提交。关闭这个面板,然后再次打开,这时候控制台打印出了数据:

    1. 1, 0

    这是因为面板在关闭的时候,发送了两条消息:

    1. const tab = await Editor.Message.send(packageJSON.name, 'query', 'tab');

    至此,我们完成了一次面板与扩展进程的交互。