说明:我了解主流程和渲染器流程位于不同的范围内,并且不会共享数据。这不是问题。问题是,如果我从Main进程中获取数据,然后尝试对其进行突变,则不会。
我遇到一种情况,当从渲染器访问电子应用程序的Main进程中的数组是不可变的。我不是Javascript英雄,所以我对此很猜疑,但我想了解发生了什么。
这是基本轮廓:
主要过程:存储对象数组
// class instance with getter/setter for a "data" property
global.model = new Model();
渲染器过程:提取“模型”数据属性并对其进行更改
editorJson = remote.getGlobal('model').data;
渲染过程进行了更改,但是当我尝试设置数组项的值时,该值不会更改(通过 renderer 控制台输出进行检查)
editorJson.events[i] = activeEvent;
console.log('activeEvent',activeEvent);
console.log('editorJson.events',editorJson.events[i]);
editorJson.events[i]
不反映设置的新数据
问题:主进程中的数组是否有可能是不可变的?我一直在搜索,却没有看到任何东西。
我正在解决的方法(似乎正在工作)是克隆数据,进行更改,然后将其发送回主进程,然后将其保存到磁盘:
editorJson = Object.assign({},remote.getGlobal('model').data);
// make a bunch of changes in render process then set it back on main process:
remote.getGlobal('model').data = editorJson;
// "model" writes out the changed data
顺便说一句,我这样做是因为我有一个窗口式,演示/编辑器类型的应用程序,需要共享JSON数据。每个窗口都可以对数据进行更改–因此,有必要在主流程中集中数据,并在发生更改时让其处理窗口的保存和更新。至少那是理论...