由于AJAX调用使用浏览器后退按钮创建问题,我正在使用link_to_remote
转换我的link_to
个生成器。 (愚蠢的noob错误!)
我的应用程序有很多页面都有很长的等待周期(由于各种原因而无法控制)。我一直依赖于link_to_remote在用户等待时使用:before
和:after
调用来显示微调器的能力。 link_to
有类似的东西吗?我假设只是像link_to_remote
一样抛出调用...但这对:before
调用真的有意义(它似乎没有用)。此时我的其他选择是什么?
答案 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>