2016-04-21 26 views
20

Sto imparando Electron e lavorando con più finestre e IPC. Nel mio script principale ho la seguente:Passaggio di dati a Windows in elettrone

var storeWindow = new BrowserWindow({ 
    width: 400, 
    height: 400, 
    show: false 
}); 

ipc.on('show-store-edit', function(event, store) { 
    console.log(store); 
    storeWindow.loadURL('file://' + __dirname + '/app/store.html'); 
    storeWindow.show(); 
}); 

E nel mio primo scritto della finestra, ho il seguente all'interno di un evento click su una lista di negozi:

$.getJSON("http://localhost:8080/stores/" + item.id).done(function(store) { 
    ipc.send('show-store-edit', store); 
}); 

Nella console, io sono stampando i dati del negozio dal mio server. Quello su cui non sono chiaro è come ottenere quei dati nella vista per il mio storeWindow:store.html. Non sono nemmeno sicuro che sto gestire la sequenza di eventi in modo corretto ma sarebbero:

  • clic su Modifica Conservare
  • get memorizzare dati dal server
  • aperta una nuova finestra per visualizzare i dati memorizzare

o

  • clic su Modifica Conservare
  • aperta una nuova finestra per visualizzare i dati memorizzare
  • memorizzare i dati da server get

In quest'ultimo caso, io non sono sicuro di come avrei ottenere l'ID necessario per andare a prendere il negozio dallo script storeWindow's.

+1

È possibile utilizzare 'storeWindow.webContents. invia (EVENT_NAME, ARGS) '([docs] (http://electron.atom.io/docs/v0.37.6/api/web-contents/#webcontentssendchannel-arg1-arg2-)) per inviare dati a una finestra particolare. Devi anche aggiungere un listener nel processo della finestra - 'ipcRenderer.on (EVENT_NAME, function (ARGS) {});' –

+0

se lo metti come risposta, posso accettarlo. – Gregg

risposta

21

Per inviare eventi a una finestra specifica è possibile utilizzare webContents.send(EVENT_NAME, ARGS) (see docs). webContents è una proprietà di un'istanza della finestra:

// main process 
storeWindow.webContents.send('store-data', store); 

Per ascoltare per questo evento di essere inviato, è necessario un ascoltatore in un processo finestra (renderer):

// renderer process 
var ipcRenderer = require('electron').ipcRenderer; 
ipcRenderer.on('store-data', function (store) { 
    console.log(store); 
}); 
+0

Dove è definito 'ipcRenderer'? – hackjutsu

+3

@Hackjutsu, è fornito dal pacchetto di elettroni. Puoi importarlo in questo modo: 'var ipcRenderer = require ('electron'). IpcRenderer;' o es6 'importa {ipcRenderer} da 'electron';' –

+0

Bello! Grazie per aver spiegato :) – hackjutsu

Problemi correlati