link_to是否具有:before和/或:after link_to_remote

时间:2009-06-08 23:12:37

标签: ruby-on-rails ruby

由于AJAX调用使用浏览器后退按钮创建问题,我正在使用link_to_remote转换我的link_to个生成器。 (愚蠢的noob错误!)

我的应用程序有很多页面都有很长的等待周期(由于各种原因而无法控制)。我一直依赖于link_to_remote在用户等待时使用:before:after调用来显示微调器的能力。 link_to有类似的东西吗?我假设只是像link_to_remote一样抛出调用...但这对:before调用真的有意义(它似乎没有用)。此时我的其他选择是什么?

3 个答案:

答案 0 :(得分:4)

link_to“点击我”,your_url,:onclick => “JavaScript的”

答案 1 :(得分:1)

由于link_to生成一个简单的锚点供用户点击,可能你最好的选择是为document.onunload添加javascript处理程序来替换你的:before处理程序。你是以下的SOL:后处理程序;-)为此检查Prototype的Event.observe(),或者使用RJS进行更好的Rails集成。

答案 2 :(得分:0)

如果你愿意学习一点Javascript,我发现在jQuery中做同样的事情要快速而简单。听起来你仍在进行AJAX调用,只是link_to_remote行为产生了不幸的副作用。

如果您的Rails视图代码如下所示:

<%= link_to "Show me", slow_page_url, :class => 'remote', :'data-update' => 'display' %>

我喜欢像这样添加一个jQuery块:

<% content_for :dom_ready do %>
  // register a callback for the click event on links with class 'remote'

  $('a.remote').click( function() {

    // this is the clicked_link, which you may want to 
    // persist thru several levels of callbacks
    // so assign it to a local variable

    var clicked_link = this;

    // assuming you already have a start_spinner function, 
    // and you might pass it the object where the click occured

    start_spinner(clicked_link);

    // here's the ajax call, which will automatically update 
    // the div you identified using the data-update attribute 
    // with the returned html

    $('#'+$(this).attr('data-update')).load( $(this).attr('href'), {}, function() {

       //this callback only runs when the AJAX request has completed

      stop_spinner( clicked_link );

    } );

    // prevents the click event from propagating to the window object 
    //and moving the user away from the current page

    return false;
  } );
<% end %>

然后我将所有javascript加载到我的布局底部,如此

<%= javascript_include_tag 'jquery-1.3.2.js' %>
<script type="text/javascript">
$( function() {
  <%= yield :dom_ready %>
);
</script>