存储在完成操作后要执行的任意操作

时间:2010-09-11 00:08:57

标签: javascript jquery ruby-on-rails callback

对于非登录用户,我的应用程序的流程如下所示:

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 

我该怎么办?我相信它可以通过精心设计的回调来完成。部分棘手的部分是有一系列潜在行动

3 个答案:

答案 0 :(得分:1)

你已经标记了ruby-on-rails,所以我想这将是一个rails应用程序。您是否计划实施自己的身份验证和登录系统,或者您打算使用gem /插件。我问,因为如果动作都是在/ a控制器中定义的话,我不会想到动作的范围会很棘手。例如,devise添加:

before_filter :authenticate_user!
控制器中的

将确保所有操作都需要登录。这可以通过以下方式进一步改进:除了

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

考虑到这一点,我们只需要考虑ajax部分。您也许可以使用js.erb模板并在方法中使用respond_to来实现此目的,例如

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

困难的部分可能实际上是让ajax日志部分工作,但希望我所说的可能有助于思考过程。

Ryan Bates使用Rails对jQuery进行了很好的截屏,但是我无法发布链接...

答案 1 :(得分:1)

尝试查看jQuery的taconite plugin。这个和Ruby有一个线程,但它似乎已经消失了,除了Google's cache

答案 2 :(得分:1)

将操作存储为变量中的回调:

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

当未记录的用户尝试执行此操作时,通过单击按钮或其他任何内容,您的应用程序应将回调作为参数传递给登录函数,如下所示:

show_login_form(callback);

...其中callback是在成功登录时执行的内容。把它们放在一起:

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

请确保您进行某种服务器端验证,因为我的示例过于简单且容易被黑客攻击。