turbolinks:load 远程 true 调用未触发事件,rails,jquery

turbolinks:load event not firing on remote true call, rails, jquery

我在app/assets/javascripts/media_preview_script.js

中有一个简单的js文件
$(document).on('turbolinks:load', function() {
  $("#cat").on('click', function() {
    showBrowseInput()
  })
})
function showBrowseInput () {
  do stuff here
}

据说 turbolinks:load 使此脚本附加到第一个页面加载,然后任何 turbolinks 调用之后,但它不会这样做。它仅在页面加载时加载,然后不附加返回事件的任何 remote: true 调用。这与我的应用程序中的任何脚本都一样。

发生这种情况是因为开头的 $(document).on('turbolinks:load'...,当我删除它时,如果我将文件包含在带有 <%= javascript_include_tag "file_name" %> 的视图表单中,我不会在文档和事件将附加每个 js 调用或页面加载。所以我的问题是,javascript_include_tag 是否添加了 turbolinks 功能?或者任何人都可以告诉我这里发生了什么。我正在使用 rails 5.

layouts/application.html.erb

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>

javascipt 包含标签 api 文档 here and layouts and rendering here

我认为问题在于 remote: true 使其与 ajax 一起工作。您可以使用此代码处理您想要的事件:

$('form').ajaxError(function(event, request, settings) {
  // your code
})

$('form').bind('ajax:success', function(evt, data, status, xhr){
  // your code
})

所述

更新:

我使用此解决方案遇到的唯一问题是 ajax:success 在页面完全刷新之前触发。我改为使用此代码:

$('form').bind('turbolinks:request-end', function(evt, data, status, xhr){
    // your code
});