2017-06-04 2 views
0

electron-appの場合、グローバル変数を使用して、管理パネル(主にさまざまなクライアントから受け取ったステータス情報)に一定の値を変更して保存します。電子のグローバル変数の変更へのバインド

だから私のメインの過程で、私はこのデータを収集し、これは完璧に動作し、私は私のクライアントのステータスデータとオブジェクトの配列を与える変数

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

に書き込みます。私はページをリロード場合

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; 
    }); 

データが正しいレンダリングされるが、唯一のアップデート:私のレンダリングプロセスでは

たとえば[{"id":"abe289c8-71ae-4764-87d8-1eb7b8adde7f","IP":"192.168.0.2","type":"Client Type 1","MachineName":"HP4711"}]の場合、このデータはRACTIVEを経由して、ライブ表示されているページがあります。 magic: trueを使用した場合、エラーが発生するTypeError: Cannot redefine property: id at Function.defineProperty (<anonymous>) at ...\ractive\ractive.js:10637:11

誰でもアイデアを得ていますか、あるいは急速に変化する値を電子的にグローバルに保存する良い方法を知っていますか? remoteため

答えて

1

Documentationは言う:

注:リモートモジュールを介してアクセスしたときアレイとバッファがIPC上にコピーされます。レンダラープロセスでそれらを変更しても、メインプロセスで変更されず、その逆もあります。

これは、あなたがremote.getGlobal('sharedObject')を呼び出すときにあなただけの時間で、その時点でshareObjectの状態を取得することを意味します。レンダリング側で配列が変更されなかったため、ビューは更新されません。

shareObjectが更新されるたびにwin.webContents.sendでメッセージを送信できます。レンダラーでは、これらのメッセージをリッスンしてから、Ractiveコンポーネントを更新します。

+0

オハイオ州。これを見なかったありがとう。私は前にwebContentsを考えましたが、私のアプリケーションは単一のページアプリケーションではないので、複数のページにわたって常に変化するデータを維持しています(そのうちの1人だけがこのデータを使用しています)。したがって、私は何とかグローバルに保存できることを望んでいました(ローカルストレージも可能ですが、このデータは時間的に関連しており、アプリケーションがクラッシュまたはシャットダウンした場合には保持しないでください)。 – Torf

関連する問題