我有一个索引操作页面,显示了与Kaminari分页的项目列表,并且我已经为它们添加了ajax功能,现在我试图通过使用pushState来使URL适合。pushState with Rails ajax
我的问题是如何得到的URL传递给pushState的方法时,我的分页链接通过完成:
<%= paginate @coasters, remote: true %>
和JavaScript观点如下:
$('.grid').html('<%= escape_javascript render(@coasters) %>');
$('.pagination').html('<%= escape_javascript(paginate(@coasters, remote: true).to_s) %>');
我需要以某种方式获取URL作为我读过的pushstate的第三个参数?
UPDATE:
我把它改成如下:
$(document).ready(function() {
$(document).on('click', '.pagination a[data-remote=true]', function(e) {
history.pushState({}, '', $(this).attr('href'));
});
$(window).on('popstate', function() {
$('.grid').html('<%= escape_javascript render(@coasters) %>');
$('.pagination').html('<%= escape_javascript(paginate(@coasters, remote: true).to_s) %>');
});
});
$('.grid').html('<%= escape_javascript render(@coasters) %>');
$('.pagination').html('<%= escape_javascript(paginate(@coasters, remote: true).to_s) %>');
所以我觉得我的代码现在通过拍摄的分页远程真正的链接点击绕过轨道的jQuery UJS自己和网址有点工作。
似乎URL有时会更新。后退按钮也失败。
任何想法我错了吗?
更新2:
我感动我的javascript的块到我的主要页面的JavaScript而不是JavaScript的观点:
$(document).on('click', '.pagination a[data-remote=true]', function(e) {
history.pushState(null, '', $(this).attr('href'));
});
$(window).on('popstate', function() {
console.log('popState started');
$('.grid').html('<%= escape_javascript render(@coasters) %>');
$('.pagination').html('<%= escape_javascript(paginate(@coasters, remote: true).to_s) %>');
});
随着popstate东西去掉上述codeupdates的URL完美的链接时被点击,但当我添加popState东西回邮局被称为一旦我做一个页面刷新测试和我的网格区域被替换为以下行文本输出的儿子我的页面:
$('.grid').html('<%= escape_javascript render(@coasters) %>');
$('.pagination').html('<%= escape_javascript(paginate(@coasters, remote: true).to_s)
如何让popstate正常工作?
这个railscast可能会有帮助:http://railscasts.com/episodes/246-ajax-history-state另外,你可以使用'<%= j'作为'<%= escape javascript'的缩写。:) – Arjan
我确实看过,我从中获得了一些想法,但它仍然无法正常工作 – rctneil
好的,现在将更新添加到OP ... – rctneil