Уточнение: Я понимаю, что основные процессы и процессы визуализации находятся в разных областях и не обмениваются данными. Это не проблема. Проблема в том, что если я получу данные из основного процесса, а затем попытаюсь изменить их, это не так.
Я столкнулся с ситуацией, когда массив в главном процессе моего приложения Electron является неизменным при доступе из средства визуализации. Я не герой Javascript, поэтому я догадываюсь об этом, но я хотел бы понять, что происходит.
Это основная схема:
Основной процесс: хранит массив объектов
// class instance with getter/setter for a "data" property
global.model = new Model();
Процесс рендеринга: извлекает свойство данных "модель" и вносит в него изменения
editorJson = remote.getGlobal('model').data;
Процесс рендеринга вносит изменения, но когда я пытаюсь установить значение элемента массива, значение не изменяется (как проверено с помощью рендерер консольный вывод)
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. Каждое окно может вносить изменения в данные - поэтому имеет смысл централизовать данные в основном процессе и позволить ему обрабатывать сохранение и обновление окон при изменении. По крайней мере, это теория ...