【问题标题】:Rails & Ajax / Async loading partialRails & Ajax / 异步加载部分
【发布时间】:2013-05-07 15:15:44
【问题描述】:

我有以下工作非常好,加载部分点击链接。但是我在修改它时遇到了麻烦,以便文档准备好或类似的部分负载。我基本上想异步加载我的慢速加载部分。谁能指出我正确的方向?我觉得这可能是一个小的修改来实现这一点。

#ProductsController
def show_territories  
  respond_to do | format |  
    format.js {render :layout => false}  
  end
end

#products/show.html.erb
<%= link_to 'Show Territories', show_territories_product_path(:id => @product.id),  :remote => true %>
<div id="spinner" class="spinner"><%= image_tag("ajax-loader-2.gif") %></div>
<div id="territories" class="tab-contents"></div>

#products/show_territories.js.erb
$( "#territories" ).html( "<%= escape_javascript( render( :partial => "territories") ) %>" );

#products/_territories.html.erb
<!--- partial view code goes here --->


#custom.js
$(function(){
// hide it first
$("#spinner").hide();

// when an ajax request starts, show spinner
$(document).ajaxStart(function(){
    $("#spinner").show();
});

// when an ajax request complets, hide spinner    
$(document).ajaxStop(function(){
    $("#spinner").hide();
});
}); 

【问题讨论】:

标签: jquery ruby-on-rails ajax ruby-on-rails-3


【解决方案1】:

你可以简单地通过调用 click() 来手动触发部分加载。

<%= link_to 'Show Territories', show_territories_product_path(:id => @product.id), :remote => true, :id => 'territories_link' %>

$(function(){
  // hide it first
  $("#spinner").hide();

  $('#territories_link').click();

  ...
});

【讨论】:

  • 太棒了,完美运行,我可以通过 Chrome 的 RailsPanel 看到我正在让两个进程异步加载。我的微调器停止工作了,但我会弄清楚的。谢谢!!
  • 好的!很高兴我能帮上忙:)仅供参考,它异步加载的原因是javascript“点击”链接但不等待响应发生,而是继续执行其余代码。
  • 是的,这很酷,很确定这正是我需要的。唯一让我担心的是,如果我更快的加载元素由于某种原因而停止,那么在它们完成之前加载它可能会阻碍它们的加载。但如果它们是异步的,也许不会?
【解决方案2】:

我一直在根据rails's jquery-ujs(handleRemote 方法)的代码尝试一些东西。看起来这很好用,不需要在页面中放置实际链接:

    $(function() {
        var tmpElement = $(document.createElement('a'))
        tmpElement.data('remote',true)
        tmpElement.prop('href', '<%= j show_territories_product_path(id: @product.id) -%>')
        $.rails.handleRemote(tmpElement)
    })

【讨论】:

  • 绝招!效果很好,只需要小心使用它的 Turbolinks!
猜你喜欢
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多