1

我有一个只允许经过身份验证的用户的操作。如果尚未登录的用户单击此链接,Web 服务器将返回未登录响应。然后,我将登录表单显示在一个浮动的“灯箱”div 中。如果用户成功登录,我希望浏览器重试该操作。

我很难找到一个存储我想重试的功能的好地方。目前,我将它附加到一个全局对象上,这看起来很 hacky。jQuery“延迟”模式似乎适合这里,但我仍然需要在某处保留对延迟对象的引用,而且我看不到正确的位置。

建议?

下面是一些简化的代码(实际上,Ajax 响应决定了我们是显示登录表单还是确认操作):

$(function() { 
    $('li.secured').find('a').click(function() {
        var link = this;
        var action = function() {               // captures 'link'
            if(RootObj.IsAuthenticated() ) {            // already logged in 
                window.location.assign( link.href );
            } else {
                // pass ourself in as a callback to be repeated after authentication
                // Yes, this seems to work even in the midst of our own definition...
                RootObj.ShowLoginForm( action );  
            }
            return false;           // don't go immediately to the new url
        }
        return action();
    });
});

RootObj.ShowLoginForm = function( callback ) {
    var lb = $('#lightbox');
    if(lb.length == 0) { lb = $('<div id="lightbox" class="lightbox"></div>').appendTo('body'); }
    lb.load('login.html');

    RootObj.callback = callback;    // is there a better place to store this callback function?
}
4

0 回答 0