0

私は、ajax を使用したページネーションに加えて、pushState を使用して URL を更新しようとしています。私が抱えている問題は、それが最初にしか実行されないことです。

私の完全なセットアップは次のとおりです

Rails 3.2、Jquery、Kaminari(ページネーションgem)

これが私がURLを更新するために使用するコードです

jQuery ->
  $(".pagination a[data-remote=true]").on 'click', (e) ->
    e.preventDefault()
    history.pushState {}, '', $(this).attr("href")

そして、show.js.erb で、使用するコンテンツを更新する

$("#reviews").html('<%= escape_javascript render("review") %>')
$("#paginator").html('<%= escape_javascript(paginate(@reviews, :remote => true).to_s) %>');

ショーは毎回機能しますが、最初のスクリプトは最初にのみ機能します。

生成されたスクリプトにブレークポイントを設定すると、スクリプトが最初に呼び出されたときに動作することがわかりますが、その後は呼び出されません。何らかのバインド解除があったかのようです。

4

3 に答える 3

1

jquery-ujs を使用すると、次のようになります。

show.html.erb では:

<div id="content">
  <div class="paginator">
     <%= paginate @mydata, remote: true %>
  </div>

  <div id="mydata">
    <%= render partial: 'mydata' %>
  </div>

  <div class="paginator">
    <%= paginate @mydata, remote: true %>
  </div>
</div>

show.js.erb では:

$('div#mydata').html('<%= j render partial: 'mydata' %>');
$('div.paginator').html('<%= j(paginate(@mydata, :remote => true).to_s) %>');

application.js で:

$('div#content').on('click', '.pagination a[data-remote=true]', function() {
    history.pushState(null, '', $(this).attr("href"))
});
$(window).on('popstate', function () {
    var remoteUrl = "<a href='" + document.location.href + "'" + " data-remote='true'></a>"
    $.rails.handleRemote( $(remoteUrl) );
});
于 2014-12-17T19:04:32.700 に答える
0

おそらくすべての.pagination a[data-remote=true]リンクは、#paginatorコンテンツが更新されるコンテナー内にありますshow.js.erb。html 置換後にメソッドでバインドを繰り返すかon、親コンテナーからイベント ハンドラーを委譲する必要があります[on詳細については、ドキュメントを参照してください]。

jQuery ->
  $("#paginator").on 'click', '.pagination a[data-remote=true]', (e) ->
    e.preventDefault()
    history.pushState {}, '', $(this).attr("href")
于 2013-12-13T17:52:48.113 に答える