2017-06-04 57 views
0

對於電子應用程序,我使用全局變量在我的管理面板中存儲一些不斷變化的值(主要是從各種客戶端收到的狀態信息)。綁定到電子全局變量的變化

所以在我的主要過程中,我收集這些數據,並將其寫入到一個變量

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: true,我得到一個錯誤TypeError: Cannot redefine property: id at Function.defineProperty (<anonymous>) at ...\ractive\ractive.js:10637:11

有沒有人有一個想法,或知道一個更好的方法來存儲全球電子快速變化的值?

回答

1

Documentationremote說:

注:當通過遠程模塊訪問數組和緩衝區拷貝了IPC。在渲染器進程中修改它們不會在主進程中修改它們,反之亦然。

這意味着,當您撥打remote.getGlobal('sharedObject')時,您只需在當時得到shareObject的狀態。您的視圖不會更新,因爲該數組在渲染器方面根本沒有更改。

您可以通過win.webContents.send發送消息,每次更新shareObject。在渲染器中,您將偵聽這些消息,然後更新Ractive組件。

+0

Oh dang。沒有看到這個。謝謝。我以前想過webContents,但我的應用程序不是單頁應用程序,所以在多個頁面上維護不斷變化的數據(其中只有一個使用這些數據)是相當的過載。因此,我希望能夠以全局的方式存儲它(本地存儲也是可能的,但這些數據是時間相關的,不應該在應用程序崩潰或關閉的情況下持久保存)。 – Torf