2016-04-21 13 views
20

Tôi đang học Electron và làm việc với nhiều cửa sổ và IPC. Trong kịch bản chính của tôi, tôi có những điều sau đây:Chuyển dữ liệu đến Windows bằng điện tử

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

Và trong chủ yếu của tôi kịch bản của cửa sổ, tôi đã sau bên trong một sự kiện nhấp chuột vào một danh sách các cửa hàng:

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

Trên giao diện điều khiển, tôi in dữ liệu lưu trữ từ máy chủ của tôi. Những gì tôi không rõ ràng là làm thế nào để có được dữ liệu đó vào xem cho storeWindow:store.html của tôi. Tôi thậm chí không chắc rằng tôi đang xử lý chuỗi các sự kiện một cách chính xác nhưng họ sẽ là:

  • nhấp Chỉnh sửa cửa hàng
  • get lưu trữ dữ liệu từ máy chủ
  • mở cửa sổ mới để hiển thị dữ liệu lưu trữ

hoặc

  • nhấp chỉnh sửa cửa hàng
  • cửa sổ mới mở để hiển thị dữ liệu lưu trữ
  • dữ liệu get cửa hàng từ máy chủ

Năm thứ hai, tôi không chắc chắn làm thế nào tôi sẽ nhận được ID cần thiết để lấy các cửa hàng từ storeWindow's kịch bản.

+1

Bạn có thể sử dụng 'storeWindow.webContents. gửi (EVENT_NAME, ARGS) '([tài liệu] (http://electron.atom.io/docs/v0.37.6/api/web-contents/#webcontentssendchannel-arg1-arg2-)) để gửi dữ liệu đến cửa sổ cụ thể. Bạn cũng phải thêm người nghe trong quá trình cửa sổ - 'ipcRenderer.on (EVENT_NAME, hàm (ARGS) {}); ' –

+0

nếu bạn đặt câu trả lời này làm câu trả lời, tôi có thể chấp nhận nó. – Gregg

Trả lời

21

Để gửi sự kiện đến cửa sổ cụ thể, bạn có thể sử dụng webContents.send(EVENT_NAME, ARGS) (see docs). webContents là một tài sản của một trường hợp cửa sổ:

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

Để nghe cho sự kiện này được gửi đi, bạn cần một người biết lắng nghe trong một quá trình cửa sổ (renderer):

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

Định nghĩa 'ipcRenderer' ở đâu? – hackjutsu

+3

@ Hackjutsu, nó được cung cấp bởi gói điện tử. Bạn có thể nhập nó như sau: 'var ipcRenderer = require ('electron'). IpcRenderer;' hoặc es6 'import {ipcRenderer} từ 'electron'; ' –

+0

Tốt! Cảm ơn bạn đã giải thích :) – hackjutsu

Các vấn đề liên quan