【问题标题】:Storing an arbitrary action to be executed upon completion of an action存储一个动作完成后要执行的任意动作
【发布时间】:2010-09-11 00:08:56
【问题描述】:

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

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 

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

【问题讨论】:

    标签: javascript jquery ruby-on-rails callback


    【解决方案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);
    

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

    【讨论】:

    【解决方案2】:

    尝试查看 jQuery 的 taconite plugin。有一个关于这个和 Ruby 的帖子,但除了 Google's cache 之外,它似乎已经消失了。

    【讨论】:

    【解决方案3】:

    您已经标记了 ruby​​-on-rails,所以我猜这将是一个 rails 应用程序。您是打算实现自己的身份验证和登录系统,还是打算使用 gem/plugin。我问是因为如果动作都在/a 控制器中定义,我不会想到动作范围会是棘手的部分。例如devise 添加:

    before_filter :authenticate_user!
    

    在控制器中将确保所有操作都需要登录。这可以使用 :except like 进一步细化

    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 进行了很好的截屏,但我无法发布链接...

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 2020-10-26
    • 1970-01-01
    相关资源
    最近更新 更多