在 JavaScript 中,當處理事件時,您可以調用 event.preventDefault() 來阻止事件的默認操作。在 NodeJS 中,這會將 event.defaultPrevented 設置為 true。我希望能夠在我的類中創建自定義發射器,該發射器將默認執行諸如關閉應用程序提供的 event.preventDefault() 不被調用。問題是,發射器似乎沒有辦法檢查 preventDefault() 是否已被調用,因為 defaultPrevented 是事件的屬性而不是發射器,因此發射器無法讀取。
這是一些示例代碼
class MyClass extends EventEmitter{
close(winID:number):void{
this.emmit('will-quit');
app.close(winID);
}
}
如果 will-quit 的偵聽器調用 preventDefault,我想防止 app.close() 被調用。
我有一個關於如何檢查是否調用了 preventDefault 的想法,但它非常笨拙,可能不是最好的主意。
class MyClass extends EventEmitter{
close(winID:number):void{
this.once('will-quit', (event) => {
if (!event.defaultPrevented){
app.close(winID);
};
};
this.emit('will-quit');
}
}
這樣就在事件觸發之前創建了一個偵聽器,因此它應該是最後一個被調用的。當它被調用時,它會檢查是否調用了 preventDefault 以及它是否沒有調用所需的代碼。因為它使用一次,一調用就銷毀。
我認為應該有更好的方法來做到這一點,但我在任何文檔或教程中都找不到任何內容,所以我想知道這是否可能。但是在同樣的思想框架上,像 Electron 似乎通過使用 C++ 模塊來實現這一點。
注意:所有代碼示例均使用 TypeScript 編寫
問題是,發射器似乎沒有辦法檢查 preventDefault() 是否已被調用,因為 defaultPrevented 是事件的屬性而不是發射器,因此發射器無法讀取。
您根本沒有發出事件對象,因此沒有方法和屬性。但是,您可以通過創建這樣的對象輕鬆模擬DOMdispatchEvent
方法:
class MyClass extends EventEmitter{
close(winID:number): void {
const event = {
defaultPrevented: false,
preventDefault(): void {
this.defautPrevented = true;
},
};
this.emit('will-quit', event);
if (!event.defaultPrevented) {
app.close(winID);
}
}
}
無需自己安裝事件偵聽器。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句