我有一个使用Turbolinks
的Rails 4应用。我的理解是Turbolinks
打破了jQuery代码,因为Turbolinks不加载新页面,而只是获取新元素。
因此,导航到新页面可能不会触发.ready
,尽管它总是触发.page:load
,因此新的jQuery代码不会初始化。
我有很多jQuery代码,所以我不想修改我的jQuery代码以与Turbolinks兼容。
是否可以在我的application.js中添加javascript代码,覆盖.ready
事件以包含page:load
?我该怎么办?
答案 0 :(得分:4)
不要等待$(document).ready
为您的jQuery触发,而是使用page:load
代替:
$(document).on 'page:load' ->
<your code>
或者,您可以设置jquery.turbolinks gem:https://github.com/kossnocorp/jquery.turbolinks
答案 1 :(得分:3)
使用turbolinks 5.0.0,事件更改为turbolinks:load
。请参阅full list of turbolinks events。
document.addEventListener("turbolinks:load", function() {
// ...
})
位于https://github.com/dalpo/jquery.turbolinks的jquery.turbolinks fork已经反映了这些变化,并允许无缝插入turbolink。不过,我会去turbolinks:load
事件进行完全控制而不需要另一个库。
答案 2 :(得分:2)
我必须使用page:change
事件:
JS:
$(document).on('page:change', function () {
<code here>
});
咖啡脚本:
$(document).on 'page:change', ->
<code here>
答案 3 :(得分:1)
使用TurboLinks 5 / Rails 5 ...我建议像这样实例化DataTables。
当使用后退按钮时,它将阻止标题和页脚分页多次显示。
$(document).on 'turbolinks:load', ->
tableElementIds = [
'### TABLE ID HERE ###'
]
i = 0
while i < tableElementIds.length
tableElementId = tableElementIds[i]
if $.isEmptyObject($.find(tableElementId))
i++
continue
table = undefined
if $.fn.DataTable.isDataTable(tableElementId)
table = $(tableElementId).DataTable()
else
table = $(tableElementId).DataTable(### OPTIONS HERE ###)
document.addEventListener 'turbolinks:before-cache', ->
table.destroy()
return
i++
return