使用双状态按钮替换Rails确认警报

时间:2012-04-18 11:32:55

标签: jquery ruby-on-rails-3 twitter-bootstrap

在Rails 3中的链接中使用数据确认标记会生成需要提醒以进行确认的无障碍Javascript。例如:

<%= link_to "Destroy", @product, :confirm => "Are you sure?", :method => :delete %>

但是,我想将此行为更改为以下内容:

单击按钮将其文本更改为“当然?”然后用户必须再次单击它才能执行操作。 (也许文本甚至可以在超时后恢复正常)

在Rails 3.1应用程序中更改此行为的最佳位置在哪里? (顺便说一句,我正在使用Twitter Bootstrap,以防有一个更好的解决方案可以很好地工作)。

1 个答案:

答案 0 :(得分:0)

所以这就是你如何做到的(这是基于Custom rails confirm box (with $.rails.confirm override)

如果你需要(Rails 3.1)

,这将在你的application.js中
$.rails.confirm = function(message, element) 
{ 
    var state = element.data('state');
    var txt = element.text();
    if (!state)
    {
        element.data('state', 'last');
        element.text('Sure?');
        setTimeout(function()
        {
            element.data('state', null);
            element.text(txt);
        }, 2000);
        return false;
    }   
    else
    {
        return true;
    }
};

$.rails.allowAction = function(element) 
{
    var message = element.data('confirm'),
        answer = false, callback;
    if (!message) { return true; }

    if ($.rails.fire(element, 'confirm')) 
    {
        // le extension.
        answer = $.rails.confirm(message, element);
        callback = $.rails.fire(element, 'confirm:complete', [answer]);
    }
    return answer && callback;
};

$.rails.handleLink = function(link) 
{
    if (link.data('remote') !== undefined) 
    {
        $.rails.handleRemote(link);
    } 
    else if (link.data('method')) 
    {
        $.rails.handleMethod(link);
    }

    return false;
};