javascript – Adob​​e AIR – 在新创建的窗口上使用EventListener的正确方法是什么?

我是AIR开发的新手,刚刚开始认真构建我的第一个简单的应用程序.我想打开一个新窗口,在第一次运行时提示用户输入所需的设置.在测试新窗口并检测其关闭状态时,我已完成以下操作(包括一些jQuery代码):

以下代码用于在运行主应用程序时打开新窗口(如打开时的soo).

$(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运行时错误的问题:

An ActionScript error has occurred:
“TypeError: Error #2007: Parameter
type must be non-null.
at flash.events::EventDispatcher/removeEventListener()”

我相信这个错误与应用程序范围有关,但我也不太了解JS范围规则.如果我注释掉removeEventListener行,它似乎运行代码;但是,我不确定我是否正确地做了所有这些.我试着在我的查询中详细说明,但最初的问题可以追溯到问题的标题.

最佳答案 错误是由于缺少类(或者是名称空间?)

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

…本来应该…

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

我仍然不确定这是否是处理此类事情的推荐或正确方法.

点赞