2010-01-05 8 views
4

Je dois désactiver une action onClick jusqu'à ce qu'une animation soit arrêtée. Les animations peuvent être démarrées par 4 boutons différents - tous doivent être désactivés.removeEventListener pour une fonction anon dans AS3

-je utiliser un écouteur pour passer params à la fonction qui lancera l'animation qui est la raison pour laquelle j'utilise une fonction anonyme dans l'écouteur d'ajouter:

up.addEventListener(MouseEvent.CLICK, 
    function(event:MouseEvent):void 
    { 
     revealSpinner(event,51.42,1,spinner); 
     event.currentTarget.removeEventListener(event.type, arguments.callee); 
    }, 
    false, 0, true); 

J'ai aussi une auto d'appeler enlever l'auditeur, mais vraiment Je dois enlever l'auditeur des 3 autres boutons.

J'ai également essayé de nommer la fonction anonyme, mais cela ne fonctionne pas:

up.addEventListener(MouseEvent.CLICK, 
    myFunc = function(event:MouseEvent):void 
    { 
     revealSpinner(event,51.42,1,spinner); 
    }, 
    false, 0, true); 

// somewhere else in my app 
up.removeEventListener(MouseEvent.CLICK, myFunc); 

Edit: chacun des 4 boutons doit passer différents paramètres à la méthode revealSpinner() revealSpinner (événement, 51,42,1, spinner); revealSpinner (événement, 51.42, -1, spinner); revealSpinner (événement, 120,1, autreMC); revealSpinner (événement, 120, -1, autreMC);

Répondre

0

N'utilisez pas de fonctions anonymes. Si vous définissez un gestionnaire pour chaque bouton, vous pouvez toujours passer vos paramètres personnalisés, mais vous aurez un auditeur bien défini qui peut être retirée à tout moment:

up.addEventListener(MouseEvent.CLICK, upButtonHandler, false, 0, true); 

function upButtonHandler(event:MouseEvent):void 
{ 
    revealSpinner(event,51.42,1,spinner); 
    up.removeEventListener(MouseEvent.CLICK, upButtonHandler); 
} 


down.addEventListener(MouseEvent.CLICK, downButtonHandler, false, 0, true); 

function downButtonHandler(event:MouseEvent):void 
{ 
    revealSpinner(event,999.999,999,spinner); 
    down.removeEventListener(MouseEvent.CLICK, downButtonHandler); 
} 
1

Vous pouvez utiliser le paramètre event.currentTarget que vous ont déjà montré mais dans une fonction de rappel. Utilisez simplement une instruction switch pour définir les paramètres en fonction de la façon dont la fonction a été appelée:

function setupButtons() 
{ 
    ... 
    this.up.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true); 
    this.down.addEventListener(MouseEvent.CLICK, cbButtonClick, false, 0, true); 
} 

function cbButtonClick(event:MouseEvent):void 
{ 
    switch(event.currentTarget) 
    { 
     case this.up: 
      revealSpinner(event,51.42,1,spinner); 
      break; 
     case this.down: 
      revealSpinner(event,999999,1,spinner); 
      break; 
    } 

    event.currentTarget.removeEventListener(event.type, cbButtonClick); 
} 
Questions connexes