NodeJS中的自定義阻止默認值

計算機電子學

在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论