【问题标题】:Kaminari endless paging issueKaminari 无休止的分页问题
【发布时间】:2023-04-06 20:53:01
【问题描述】:

我正在尝试使用 Kaminari + jQuery 进行无限分页/无限滚动。我正在尝试在表中附加分页结果(行)。不幸的是,结果(行标记)出现在表格上方。这是我现有的设置:

events_controller.rb

class EventsController < ApplicationController
  respond_to :html, :js

  def index
    @events = Event.all
    respond_with(@events)
  end

end

事件/index.html.erb

<div id="events-container">

  <table cellpadding="3" cellspacing="0">
    <thead>
      ...
    </thead>

    <tbody>
      <% if @events.blank? %>
        <tr><td> No events yet</td></tr>
      <% else %>
        <div id="events">
          <%= render @events %>
        </div>
      <% end %>
    </tbody>
  </table>

  <nav class="pagination-container">
    <%= paginate @events %>
  </nav>​

</div>​

事件/index.js.erb

$('#events').append('<%= j render(@events) %>');

<% if (@events.current_page < @events.num_pages) %>
    $('.pagination').replaceWith('<%= j paginate(@events) %>');
<% else %>
    $('.pagination-container').remove();
<% end %>

事件/_event.html.erb

<tr>
  <td><%= event.time %></td>
  ...
</tr>

<tr>
  <td><%= event.location %></td>
  ...
</tr>

events_endless_paging.js

jQuery(function() {
  var isScrolledIntoView;
  isScrolledIntoView = function(elem) {
    var docViewBottom, docViewTop, elemBottom, elemTop;
    docViewTop = $(window).scrollTop();
    docViewBottom = docViewTop + $(window).height();
    elemTop = $(elem).offset().top;
    elemBottom = elemTop + $(elem).height();

    return (elemTop >= docViewTop) && (elemTop <= docViewBottom);
  };

  if ($('.pagination').length) {
    $(window).scroll(function() {
      var url;
      url = $('.pagination .next a').attr('href');
      if (url && isScrolledIntoView('.pagination')) {
        $('.pagination').text('Fetching more...');

        var script = $.getScript(url);
        return script;
      }
    });

    return $(window).scroll();
  }
});

一切似乎都已正确连接,但最终发生的事情是在#event-container div 和表格之间插入表格行。所以行样式都是不稳定的,因为标签没有被正确地插入到表格的上下文中。我感觉需要在 js 响应中插入表格标记,但不确定。

【问题讨论】:

  • $('#events').append('&lt;%= j render(@events) %&gt;'); 更改为$('#events &gt; tbody:last').append('&lt;%= j render(@events) %&gt;'); 会产生任何结果吗?未经测试,因此发表评论。
  • 好主意。不幸的是,这些事件没有在任何地方显示。尝试了追加和前置。不过,我会进一步修改您建议的方法。

标签: jquery ruby-on-rails-3 pagination kaminari


【解决方案1】:

我不认为在表格主体内有一个 div 是有效的。

如果您删除 div 并将新行直接附加到 tbody 中,您应该会取得更大的成功。

<tbody>
  <% if @events.blank? %>
    <tr><td> No events yet</td></tr>
  <% else %>
    <%= render @events %>
  <% end %>
</tbody>

【讨论】:

  • 甜蜜。这有效: $('#events-container tbody').append('');
  • 很高兴它对你有用,既然如此,你会考虑接受我的回答吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2013-06-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
相关资源
最近更新 更多