1

我有一个简单的js文件app/assets/javascripts/media_preview_script.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。

布局/application.html.erb

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

javascipt 在此处包含标记 api 文档,并此处包含布局和渲染

4

1 回答 1

1

我认为问题在于remote: true这一切都与ajax一起工作。您可以使用以下代码处理所需的事件:

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

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

https://stackoverflow.com/a/8956770/2162591中所述

更新:

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

$('form').bind('turbolinks:request-end', function(evt, data, status, xhr){
    // your code
});
于 2017-10-19T14:29:05.797 回答