2009-08-12 11 views
3

Je suis très nouveau dans le développement AIR, et je viens de commencer à construire ma première application. Je voudrais ouvrir une nouvelle fenêtre pour inviter l'utilisateur pour les paramètres souhaités lors de la première exécution. En testant la nouvelle fenêtre et en détectant son état fermé, j'ai fait ce qui suit (un peu de code jQuery inclus):Adobe AIR - Quelle est la méthode appropriée pour utiliser un EventListener sur une fenêtre nouvellement créée?

Le code suivant est utilisé pour ouvrir la nouvelle fenêtre lors de l'exécution de l'application principale (pour l'ouverture) .

$(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); 
} 

Le code ci-dessous est directement après l'accolade fermante de la fonction jQuery document.ready. Son but est de gérer l'événement de fermeture de la fenêtre des paramètres. Si elle est fermée sans soumission - ce qui est tout ce que je suis en train de tester ici - je veux supprimer l'écouteur d'événement, comme suggéré par le manuel pour améliorer la mémoire, et fermer la fenêtre principale de l'application (actuellement non visible).

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(); 
} 

Je reçois ce qui semble être une erreur d'exécution AIR surgissant après que je ferme la fenêtre Paramètres:

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

Je crois que cette erreur est liée à champ d'application, mais je ne suis pas trop versé dans les règles de portée JS soit. Si je commente la ligne removeEventListener, il semble exécuter le code; Cependant, je ne sais pas si je fais tout cela de la bonne façon ou non. J'ai essayé d'être détaillé dans ma requête, mais la question originale revient au titre de la question.

+0

Pas sûr et pas du tout familiarisé avec AIR, mais je suis assez méfiant à propos de cet événement.CLOSE .. Ne devrait-il pas être air.Event.CLOSE, comme il est dans l'appel addEventListener? –

+0

Oups, je suis désolé, Et. Je n'ai pas vu votre réponse plus tôt ce matin - vous aviez raison. Il est toujours utile d'avoir une deuxième paire d'yeux; J'aurais aimé en avoir où je travaillais. Je vous remercie! (La prochaine fois laisser une réponse afin que vous puissiez obtenir des points!) – BrendonKoz

Répondre

2

L'erreur était due à une classe manquante (ou est-ce namespace?)

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

... aurait dû être ...

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

Je suis toujours pas sûr si cela est la méthode recommandée ou appropriée pour manipuler de telles choses.

Questions connexes