It turns out that it was the same partial. Using ajax to display the view resolved this.
Correction:
index.html.haml:
%ul.accordion-tabs %li.tab-header-and-content %a.tab-link.is-active{:href => "/jobs/search?tab=ALL"} All .tab-content{:data => { :url => "/jobs/search?tab=ALL&inline=true" }} = render partial: 'jobs/list', locals: { jobs: @jobs } .loading{style: 'display:none;'} = image_tag "spinner.gif" %p Loading - @tabs.each do |tab| %li.tab-header-and-content %a.tab-link{:href => "/jobs/search?tab=#{tab}"}
jobs_controller.rb:
if params[:inline] render partial: 'jobs/list', locals: { jobs: @jobs }, layout: false else render :index end
jobs.js.coffee:
$(document).on 'page:change', -> $('.accordion-tabs').each (index) -> $(this).children('li').first().children('a').addClass('is-active').next().addClass('is-open').show() $('.accordion-tabs').on 'click', 'li > a.tab-link', (event) -> accordionTabs = undefined nextTab = undefined if !$(this).hasClass('is-active') event.preventDefault() accordionTabs = $(this).closest('.accordion-tabs') accordionTabs.find('.is-open').removeClass('is-open').hide() nextTab = $(this).next() nextTab.toggleClass('is-open').toggle() accordionTabs.find('.is-active').removeClass 'is-active' $(this).addClass 'is-active' nextTab.find('.loading').show() nextTab.find('.loading p').text 'Loading' $.ajax url: nextTab.data('url') success: (data) -> nextTab.html data nextTab.find('.loading').hide() error: -> nextTab.find('.loading p').text 'Error' else event.preventDefault()
source share