Я работаю в приложении Rails и используя опцию deferLoading: true
в jQuery DataTables, чтобы передать загрузку первых DataTables в контроллер Rails.Включить разбиение на страницы с deferLoading
У меня есть загрузка данных, как я этого хочу, загрузка начальной таблицы в контроллере избавляется от задержки Ajax, когда начальная загрузка html, однако раздел данных Datatable не отображает результаты разбивки на страницы.
Код и изображения показаны ниже.
Снова все работает, за исключением разбивки на страницы внизу таблицы, я просто не могу заставить его применять те же детали, что и Ajax, для вызова данных. Любые идеи или направления в этом вопросе будут очень признательны!
index.html.erb:
<div class="row">
<div class="col-xs-12 table-wrapper">
<div class="inner-wrapper">
<p class="quick-app">
<a class="custom-btn accent-inverse-btn add-user" href="<%= calculator_path%>">Quick Application</a>
</p>
<table class="table table-striped table-scroll cms-table-width dataTable" id="customer_deals_datatable" data-source="<%= dealer_customer_deals_url(:include_archived => params[:include_archived].present?) %>" >
<div>
<thead>
<tr>
<th>ID/Calculator</th>
<th>Applicant/Co-Applicant</th>
<th>Year</th>
<th>Model</th>
<th>App Status</th>
<th>Tier Number</th>
<th>Docs Status</th>
<th>Submitted On</th>
<th>Days Remaining</th>
<th>Chrome Decision</th>
<th>Updated At</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<% @datatable.data.each do |datum| %>
<tr>
<% datum[0] = datum[0].join('') %>
<%= (datum.map {|content| "<td>#{content}</td>"}.join('')).html_safe %>
</tr>
<% end %>
</tbody>
</div>
</table>
</div>
</div> <!-- </div>#content -->
</div>
controller
def index
respond_to do |format|
format.html do
params.merge!({"iDisplayLength"=>"10","iSortCol_0"=>"10","sSortDir_0"=>"desc"})
@datatable = CustomerDeals::CustomerDealsDataTable.new(view_context, @dealer)
end
format.json { render json: CustomerDeals::CustomerDealsDataTable.new(view_context, @dealer) }
end
end
вот часть кода из DataTable класса в проекте:
module CustomerDeals
class CustomerDealsDataTable
def fetch_deal_searches
return @deal_searches if @deal_searches.present?
deal_searches = CustomerDeals::CustomerDealSearch.where(dealership_id: @dealer)
if is_submitted_on_sort?
deal_searches = deal_searches.where('deal_dated_calculator_value != ?', 'calculator')
end
if params[:sSearch].present?
deal_searches = deal_searches.containing(params[:sSearch])
end
deal_searches = deal_searches.order(order_query)
@deal_searches = deal_searches
end
def is_submitted_on_sort?
SORT_COLUMNS[params[:iSortCol_0].to_i] == 'deal_submitted_on'
end
def lookup_sort_column
SORT_COLUMNS[params[:iSortCol_0].to_i]
end
def order_query
"#{lookup_sort_column} #{params[:sSortDir_0]}"
end
def paged_deal_searches
fetch_deal_searches.page(current_page_number).per(params[:iDisplayLength])
end
def current_page_number
params[:iDisplayLength].to_i == 0 ? 1 : params[:iDisplayStart].to_i/params[:iDisplayLength].to_i + 1
end
end
end
спасибо Gyrocode, мы добавили что-то вроде '' deferLoading ': $ (' # customer_deals_datatable '). Data ('length')] ', и это, казалось, исправило проблему. – heinztomato