Массив в главном процессе является неизменным из процесса рендеринга? - PullRequest
0 голосов
/ 31 октября 2018

Уточнение: Я понимаю, что основные процессы и процессы визуализации находятся в разных областях и не обмениваются данными. Это не проблема. Проблема в том, что если я получу данные из основного процесса, а затем попытаюсь изменить их, это не так.


Я столкнулся с ситуацией, когда массив в главном процессе моего приложения 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. Каждое окно может вносить изменения в данные - поэтому имеет смысл централизовать данные в основном процессе и позволить ему обрабатывать сохранение и обновление окон при изменении. По крайней мере, это теория ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...