2010-09-11 4 views
0

Le flux pour mon application, pour les utilisateurs non-logined, ressemble à ceci:Enregistrement d'une action arbitraire à exécuter à la fin d'une action

1) non-logined user does a given action that requires login (arbitrary) 
2) dialog appears for non-logined user and he logins without any refreshing of the page 
3) collecting of additional information if it is new user 
3) the given action should be executed 

Comment puis-je faire? Je crois que cela peut être fait avec des rappels soigneusement structurés. Une partie de la partie difficile est qu'il y a une gamme d'actions potentielles

Répondre

1

magasin l'action comme un rappel dans une variable:

var callback = function() { alert ("You are logged in."); }; 

Lorsqu'un utilisateur non connecté tente d'exécuter cette action, en cliquant sur un bouton, ou autre, votre application doit passer le rappel comme argument à la fonction de connexion comme ceci:

show_login_form(callback); 

... où callback est ce qui sera exécuté sur une connexion réussie. Mettre tous ensemble:

var callback = function() { alert ("You are logged in."); }; 
    if (loggedIn) 
     callback(); 
    else 
     show_login_form(callback); 

juste être sûr que vous faites une sorte de validation côté serveur, comme mon exemple est simpliste et facilement piraté.

+0

Merci! L'idée générale fonctionne. Je l'ai mis en œuvre, la façon dont j'ai exécuté l'événement click semble hackish - pouvez-vous jeter un oeil ici? http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

1

Vous avez étiqueté ruby-on-rails, donc je suppose que cela va être une application rails. Avez-vous l'intention de mettre en œuvre votre propre système d'authentification et de connexion ou allez-vous utiliser un gem/plugin. Je demande parce que je n'aurais pas pensé que la gamme d'actions serait la partie délicate si les actions étaient toutes définies dans le contrôleur/a. Par exemple, avec devise ajouter:

before_filter :authenticate_user! 

dans le contrôleur ferait en sorte que toutes les actions nécessiteraient une connexion. Cela peut être affiné en utilisant: sauf Avec cela à l'esprit comme

before_filter :authenticate_user!, :except => [:index, :show] 

nous ne devons vraiment réfléchir sur les parties ajax. Vous pourriez peut-être y parvenir en utilisant des modèles de js.erb et en utilisant respond_to dans la méthode, par exemple

def log_in 
    respond_to do |f| 
    # gracefully fallback! 
    f.html { redirect_to new_user_session_path } 
    # or do something snazy.. 
    f.js 
    end 
end 

La partie difficile pourrait en fait être obtenir le journal ajax dans le travail partiel, mais nous espérons que ce que je l'ai dit peut-être aider le processus de pensée.

Bates Ryan a fait un bon screencast sur jQuery avec Rails, mais je ne peux pas poster le lien ...

+0

Voici le lien http://railscasts.com/episodes/136-jquery –

+0

Thanks Ben! Bonnes idées, je suis en train de tout faire en javascript et de minimiser la logique côté serveur. ma solution est ici: http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

1

Essayez de regarder le taconite plugin pour jQuery. Il y avait un fil sur cela et Ruby, mais il semble avoir disparu, sauf de Google's cache.

+0

merci Peter! Cela semble génial, mais c'est trop lourd pour moi. J'ai implémenté la solution de cette manière: http://stackoverflow.com/questions/3692288/elegantly-passing-an-click-event-through-multiple-callbacks –

Questions connexes