0

カミナリ+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 応答内にテーブル マークアップを挿入する必要があると感じていますが、よくわかりません。

4

1 に答える 1

3

テーブル本体内に div を持つことは有効ではないと思います。

div を削除し、新しい行を tbody に直接追加すると、より多くの成功が得られるはずです。

<tbody>
  <% if @events.blank? %>
    <tr><td> No events yet</td></tr>
  <% else %>
    <%= render @events %>
  <% end %>
</tbody>
于 2012-10-21T18:32:20.280 に答える