我有一個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'嗎? –