簡體   English   中英

Adobe AIR-在新創建的窗口上使用EventListener的正確方法是什么?

[英]Adobe AIR - What is the proper method for using an EventListener on a newly created window?

我對AIR開發非常陌生,並且剛剛開始認真構建我的第一個簡單應用程序。 我想打開一個新窗口,在首次運行時提示用戶進行所需的設置。 在測試新窗口並檢測其關閉狀態時,我完成了以下操作(包括一些jQuery代碼):

以下代碼用於在運行主應用程序時打開新窗口(打開時也是如此)。

$(document).ready(function(){
    var options = new air.NativeWindowInitOptions();
    options.type = air.NativeWindowType.UTILITY;
    var windowBounds = new air.Rectangle(200,250,300,400);

    //create the new window
    newHTMLLoader = air.HTMLLoader.createRootWindow(true, options, true, windowBounds);
    newHTMLLoader.load(new air.URLRequest("setup.html"));
    newHTMLLoader.window.opener = window;
    newHTMLLoader.window.nativeWindow.addEventListener(air.Event.CLOSE, handleNewSettings);
}

下面的代碼直接在jQuery document.ready函數的大括號后面。 其目的是處理設置窗口的關閉事件。 如果沒有提交就關閉了-到目前為止,這是我正在測試的全部-我希望它刪除事件偵聽器(如手冊所述,以改善內存),並關閉主應用程序窗口(當前不可見)。

function handleNewSettings(event){
    //remove the event handler from memory first...
    newHTMLLoader.removeEventListener(Event.CLOSE, arguments.callee);

    //this is my event handler code
    alert('yay');
    window.close();
}

關閉設置窗口后,我似乎彈出了AIR運行時錯誤消息:

發生了ActionScript錯誤:“ TypeError:錯誤#2007:參數類型必須為非null。在flash.events::EventDispatcher/removeEventListener()處”

我相信此錯誤與應用程序范圍有關,但也不精通JS范圍規則。 如果我注釋掉removeEventListener行,它似乎可以運行代碼; 但是,我不確定是否要以正確的方式進行所有這些操作。 我試圖在查詢中進行詳細說明,但是原始問題可以追溯到問題的標題。

該錯誤是由於缺少類(或者是名稱空間?)引起的

newHTMLLoader.removeEventListener(Event.CLOSE, arguments.callee);

...本來應該...

newHTMLLoader.removeEventListener(air.Event.CLOSE, arguments.callee);

我仍然不確定這是否是處理此類問題的推薦或適當方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM