turbolinks:加载事件未在远程真实调用,rails,jquery

时间:2017-10-15 01:35:08

标签: javascript jquery ruby-on-rails ruby-on-rails-5 turbolinks-5

我在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.

布局/ application.html.erb

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

javascipt包含标记api doc here以及布局和呈现here

1 个答案:

答案 0 :(得分: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:在页面完全刷新之前触发成功。我改用了这段代码:

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