我有一个Ruby on Rails应用程序和一些jquery以异步渲染部分。所以,首先我要改变标签的活动状态,然后清除标签页,然后加载部分:按顺序执行jquery语句
$('#availability').addClass('active');
$('#overview').removeClass('active');
$('#availabilityTab').addClass('active').addClass('in');
$('#overviewTab').removeClass('active').removeClass('in');
$("#availabilityTab").html("<%= escape_javascript(render(partial: 'availability')) %>");
这工作得很好,但是当我点击选项卡来触发此,我希望看到一个首先空白页面页面和加载的数据。发生什么事是当点击标签时,似乎什么也没有发生,然后在3秒后显示部分。这是因为数据库调用需要一段时间(需要进行优化:-))。这让用户感到困惑,我宁愿先看到一个空白的标签页。我怎样才能做到这一点?
更新:这是控制器动作的样子:
def index
@customers = Customer.order(:name)
@target = params[:target] unless params[:target].blank?
respond_to do |format|
format.html
format.js
end
end
这是index.js.erb
:
<% if @target == "overview" -%>
$('#availability').removeClass('active');
$('#overview').addClass('active');
$('#overviewTab').addClass('active').addClass('in');
$('#availabilityTab').removeClass('active').removeClass('in');
$("#overviewTab").empty().html("<%= escape_javascript(render(partial: 'overview')) %>");
<% elsif @target == "availability" -%>
$('#availability').addClass('active');
$('#overview').removeClass('active');
$('#availabilityTab').addClass('active').addClass('in');
$('#overviewTab').removeClass('active').removeClass('in');
$("#availabilityTab").html("<%= escape_javascript(render(partial: 'availability')) %>");
<% end %>
也许尝试隐藏元素,直到完全加载?检查这里http://stackoverflow.com/questions/3452226/jquery-hide-div-until-fully-loaded – Meow
也许它是不可见的,直到你把它的内容?那么你应该为tab设置固定的宽度和高度 –
你正在使用'async:false'吗? –