Adobe AIR - Каков правильный метод использования EventListener во вновь созданном окне?

Я новичок в разработке 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: тип параметра должен быть ненулевым. At flash.events::EventDispatcher/removeEventListener ()»

Я считаю, что эта ошибка связана с областью приложения, но я тоже не слишком разбираюсь в правилах области видимости JS. Если я закомментирую строку removeEventListener, кажется, что код запускается; однако я не уверен, правильно ли я все это делаю или нет. Я попытался уточнить свой запрос, но исходный вопрос восходит к названию вопроса.


person BrendonKoz    schedule 12.08.2009    source источник
comment
Не уверен и совсем не знаком с AIR, но я весьма подозрительно отношусь к этому событию Event.CLOSE ... Разве это не должно быть air.Event.CLOSE, как в вызове addEventListener?   -  person Andrea Fiore    schedule 13.08.2009
comment
Ой, извини, И. Я не видел вашего ответа сегодня утром - вы были правы. Всегда полезно иметь вторую пару глаз; Хотел бы я иметь там, где я работал. Спасибо! (В следующий раз оставьте ответ, чтобы заработать баллы!)   -  person BrendonKoz    schedule 13.08.2009


Ответы (1)


Ошибка возникла из-за отсутствия класса (или это пространство имен?)

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

...должны были быть...

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

Я до сих пор не уверен, является ли это рекомендуемым или правильным методом обращения с такими вещами.

person BrendonKoz    schedule 13.08.2009