工作。例如,我的routes.rb樣子:自定義路線不setTimeout的
...
get 'abc/xyz' => 'abc#xyz', :as => 'abc_xyz'
...
的application.js:
...
$('a').click(showSpinner);
function showSpinner(evt) {
link = $(this);
evt.preventDefault();
$('body').append('<div class="spinner-overlay"></div>');
setTimeout(function() {
window.location = link.attr('href');
}, 10);
});
...
當使用了JavaScript去abc_xyz_path,它的鏈接因爲它正在查找ID爲xyz而不是使用自定義路由的abc記錄,因此會出現ActiveRecord RecordNotFound錯誤。但是,如果我刪除setTimeout,則沒有問題,並且可以工作。 Rails的路由系統有超時問題嗎?
UPDATE:
我意識到,我並不需要的preventDefault()或setTimeout的(),因爲這個點擊處理程序將反正重定向鏈接之前發生。問題解決了。
'link.attr('href');'從某處獲得href。這個href一定是錯誤的 - 請在html代碼片段中找到它的href,粘貼生成該html代碼的代碼,並粘貼最終從'link.attr('href')'獲得的值。 如果您只需手動點擊鏈接,它是否工作? Rails不會在乎你的超時,所以這不應該是問題。 –
它從.html.erb文件獲取href,就像任何其他'link_to'一樣。當我點擊鏈接時JS會被調用(請參閱我的編輯)。當我刪除點擊處理程序時,它工作得很好。 – BalinKingOfMoria