0

我正在尝试使用 ajax 进行分页,使用 pushState 来更新 url。我遇到的问题是它只执行第一次。

我的完整设置如下

Rails 3.2,Jquery,Kaminari(分页宝石)

所以这是我用于更新 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。您需要on在 html 替换后重复绑定方法,或者只是从父容器中删除事件处理程序[详细信息请阅读on文档]

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

尝试:

history.pushState 'data', '', $(this).attr("href")
于 2013-06-26T01:41:27.793 回答