绑定到电子中全局变量的变化

问题描述 投票:1回答:1

对于电子应用程序,我使用全局变量在我的管理面板中存储一些不断变化的值(主要是从各个客户端收到的状态信息)。

所以在我的主要过程中,我收集这些数据并将其写入变量

global.sharedObject = {
    Clients:[]
}
//on receiving information via ipc
global.sharedObject.Clients.push(data);

这完美无瑕,并为我提供了一系列带有我的客户端状态数据的对象。例如[{"id":"abe289c8-71ae-4764-87d8-1eb7b8adde7f","IP":"192.168.0.2","type":"Client Type 1","MachineName":"HP4711"}]

在我的渲染器过程中,有一个页面,通过ractive实时显示这些数据:

const remote = require('electron').remote;
let ClientList = remote.getGlobal('sharedObject').Clients;
let ractive = new Ractive({
    el: '#clientBoxes',
    template: myTemplate,
    twoway: false,
    //magic: true,
    data: {
        Clients: ClientList //or with same result:
        Clients: remote.getGlobal('sharedObject').Clients;
    });

数据呈现正确,但只有在我重新加载页面时才会更新。如果我使用magic: trueI得到一个错误TypeError: Cannot redefine property: id at Function.defineProperty (<anonymous>) at ...\ractive\ractive.js:10637:11

有没有人有想法,或者知道一种更好的方法来存储全球快速变化的电子价值?

node.js electron ractivejs
1个回答
2
投票

Documentationremote说:

注意:当通过远程模块访问时,阵列和缓冲区将通过IPC复制。在渲染器过程中修改它们不会在主过程中修改它们,反之亦然。

这意味着当你打电话给remote.getGlobal('sharedObject')时,你就会在那个时刻得到shareObject的状态。您的视图不会更新,因为数组在渲染器端没有更改。

每次win.webContents.send更新时,您都可以通过shareObject发送消息。在渲染器中,您可以侦听这些消息,然后只更新反应组件。

© www.soinside.com 2019 - 2024. All rights reserved.