我有一個索引操作頁面,顯示了與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