【发布时间】:2010-11-19 03:07:02
【问题描述】:
我对 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 错误: “类型错误:错误 #2007:参数 类型必须为非空。 在 flash.events::EventDispatcher/removeEventListener()"
我认为这个错误与应用程序范围有关,但我也不太精通 JS 范围规则。如果我注释掉 removeEventListener 行,它似乎运行代码;但是,我不确定我是否以正确的方式做这一切。我试图在我的查询中详细说明,但原来的问题又回到了问题的标题。
【问题讨论】:
-
不确定,也不熟悉 AIR,但我对那个 Event.CLOSE 很怀疑。不应该是 air.Event.CLOSE,就像在 addEventListener 调用中一样?
-
糟糕,对不起,还有。今天早上早些时候我没有看到你的回复——你是对的。拥有第二双眼睛总是有帮助的;我希望我有一些我工作的地方。谢谢! (下次留下答案,你可以加分!)
标签: javascript jquery scope air event-listener