我目前在这里有一些代码:
let loginWindow = Object.assign({}, EventEmitter.prototype, {
window: null,
create: () => {
// Load LoginWindow Settings
Settings.get("loginWindowState")
.then((state) => {
if (state === undefined) state = {};
loginWindow.window = new BrowserWindow({
x: state.x || 0,
y: state.y || 0,
width: state.width || 600,
height: state.height || 700,
frame: false,
show: false
});
if (_.isEmpty(state)) {
loginWindow.window.center();
}
if (state.maximized) {
loginWindow.window.maximize();
}
loginWindow.window.loadURL(`file://${__dirname}/../views/index.html`);
loginWindow.window.on('closed', () => { loginWindow.window = null; });
loginWindow.window.on('ready-to-show', () => loginWindow.window.show());
loginWindow.window.on('move', rememberWindowState);
loginWindow.window.on('resize', rememberWindowState);
loginWindow.window.on('maximize', rememberWindowState);
loginWindow.window.on('unmaximize', rememberWindowState);
});
loginWindow.emit("created");
},
close: () => {
loginWindow.window.close();
}
});
我用它来控制Electron
项目中的窗口,虽然我似乎误解了它的构造。
没有this
或者至少它在运行时返回undefined,我也说不出来
loginWindow.emit("created")
来自其内部,但如果我要创建对象并从外部执行它就可以正常工作
我想在创建时使用事件发射器,但我已经替换了loginWindow.emit("created");
与
return Promise.resolve(true);
现在我知道它什么时候被创建了,但我觉得我应该能够在它的位置使用事件发射器。
答案 0 :(得分:1)
Object.assign
真的不是为此而设计的。而且,箭头函数不绑定自己的this
,arguments
,super
或new.target
。这就是为什么它会在你的情况下返回undefined
。无论如何,这是我推荐的方法。
let loginWindow = new class extends EventEmitter{
constructor(){
super();
this.window = null;
}
create(){
// Load LoginWindow Settings
Settings.get("loginWindowState")
.then((state) => {
if (state === undefined) state = {};
loginWindow.window = new BrowserWindow({
x: state.x || 0,
y: state.y || 0,
width: state.width || 600,
height: state.height || 700,
frame: false,
show: false
});
if (_.isEmpty(state)) {
this.window.center();
}
if (state.maximized) {
this.window.maximize();
}
this.window.loadURL(`file://${__dirname}/../views/index.html`);
this.window.on('closed', () => { loginWindow.window = null; });
this.window.on('ready-to-show', () => loginWindow.window.show());
this.window.on('move', rememberWindowState);
this.window.on('resize', rememberWindowState);
this.window.on('maximize', rememberWindowState);
this.window.on('unmaximize', rememberWindowState);
});
this.emit("created");
}
close(){
this.window.close();
}
}