2010-09-11 8 views
5

Lorsqu'un utilisateur non logined clique sur un bouton donné, je veux arrêter l'événement, recueillir son OAuth, récupérer son e-mail si je ne l'ai pas, puis exécutez la un événement. Je veux tout faire en javascript parce que cela rendrait les choses beaucoup plus simples.passant Élégamment un « clic événement » par plusieurs callbacks

Voilà comment je suis l'exécuter, et j'ai 2 questions:

  1. Y at-il une façon plus élégante de faire plusieurs callbacks de niveau?
  2. La façon dont je déclenche l'événement à la fin semble hackish. Quelle pourrait être une meilleure façon de le faire?
jQuery("a.callbacktesting").click(function(event){ 

    if (success==false){ 
     event.preventDefault(); 
     event.stopImmediatePropagation(); 
     authentication({endevent:event,followup:afterEmail},collectEmail, failFn); 
    } 
    }); 

    //1st level function 
    function authentication(params, successFn, failFn){ 
     if (success=true){ 
     successFn(params,params.followup,failFn); 
     }else{ 
     failFn(); 
     }  
    } 

    //2nd level function 
    function collectEmail(params, successFn, failFn){ 
     console.log("Collecting email"); 
     if (success=true){ 
     successFn(params); 
     }else{ 
     failFn(); 
     }; 
    } 

    //After everything is done, you want to execute this 
    function afterEmail(params){ 
    jele=$(params.endevent.currentTarget) 
    action=params.endevent.type 
    jele.trigger(action); 
    } 

Répondre

0

Tenir compte le stockage de votre clic rappel d'un événement dans une variable. Lorsque l'utilisateur clique sur le bouton, votre JS vérifie d'abord qu'il est authentifié. Si c'est le cas, il exécute le rappel. Si ce n'est pas le cas, il passe le rappel à la routine d'authentification en tant qu'argument. Lorsque la routine d'authentification a réussi, elle peut alors exécuter le rappel.

+0

Hmmm, c'est-ce que je l'ai fait - endEvent: événement, je mets l'événement directement comme param. Le problème est de savoir comment je peux stocker l'événement click en tant que variable et l'exécuter. Je ne trouve pas de commande (event.XXX) pour l'exécuter –

1

Ce qui est avec ceci:

if (success = true) { 

?

vous vous rendez compte est mise la variable globale "succès" true, correct? Si vous voulez détecter si la variable « succès » est égal à true, utilisez ceci:

if (success === true) { 

Notez les 3 points égaux.

Faire une traduction stricte de votre code, je me suis ce résultat:

//After everything is done, you want to execute this 
function afterEmail(event) { 
    $(event.currentTarget).trigger(event.type); 
} 

//2nd level function 
function collectEmail(event) { 
    console.log("Collecting email"); 
    if (success === true){ 
     afterEmail(event); 
    } else { 
     failFn(); 
    } 
} 

//1st level function 
function authentication(event) { 
    if (success === true) { 
     collectEmail(event); 
    } else { 
     failFn(); 
    } 
} 

jQuery("a.callbacktesting").click(function (event) { 
    if (success === false) { 
     event.preventDefault(); 
     event.stopImmediatePropagation(); 

     authentication(event); 
    } 
}); 

Si vous essayez de déclencher des événements DOM, alors vous aurez besoin d'utiliser jQuery.trigger ou similaire. J'aurai besoin de plus d'informations sur votre programme pour vous aider.