在 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 撰寫
uj5u.com熱心網友回復:
問題是,發射器似乎沒有辦法檢查 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);
}
}
}
無需自己安裝事件偵聽器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361524.html
標籤:javascript 节点.js 打字稿 防止违约
