У меня есть приложение 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 секунды появляются частичные. Это связано с тем, что вызов базы данных занимает некоторое время (необходимо оптимизировать :-)). Это смущает для пользователя, я скорее хочу сначала увидеть пустую закладку. Как я могу это сделать?
Update: Это как действие контроллер выглядит следующим образом:
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
Может быть, это не видно, пока оу не разместит контент? Затем вы должны установить фиксированную ширину и высоту для вкладки –
Вы используете 'async: false' правильно? –