为什么只在首次加载或刷新页面时才加载JS?

时间:2014-08-12 22:56:24

标签: javascript ruby-on-rails ruby-on-rails-4

每当我构建Rails应用程序时,我都遇到过这个问题。基本上会发生的是,每次加载应用程序并且你有某种类型的javascript代码,它是工具提示或日期选择器,它只会在你第一次打开页面或刷新页面时加载它

因此,假设您决定访问“服务”页面,并希望选择包含以下代码的日期

$(document).ready ->
   $("[data-behaviour~=datepicker]").datepicker(
   todayBtn: "linked", 
   todayHighlight: true, 
   startDate: "(Time.current, :format => :datepicker)"
   format: "yyyy/mm/dd"
)

此代码将在首页加载时正常加载或直到刷新页面为止,但是如果您在页面之间来回切换,则由于某种原因导致代码无法加载。因为在刷新页面之前,日期选择器不会再次出现。

这在开发和生产中都会发生。任何人都知道最新情况并且需要解释吗?我做错了吗?

不,代码不是在application.js中,而是在单独的.js文件中,然后通过我认为的require树从application.js调用。

1 个答案:

答案 0 :(得分:1)

这是因为Turbolinks ajax如果链接错误,那么ready事件只会在首页加载时触发。

TL; DR

您可以使用$(document).on "page:change", ->代替$(document).ready ->

Turbolinks如何运作

Turbolinks将点击处理程序附加到页面上的所有内容。如果您的浏览器支持PushState,Turbolinks将为页面发出Ajax请求,解析响应,并用响应替换整个页面。然后它将使用PushState将URL更改为正确的URL,保留刷新语义并为您提供漂亮的URL

参考:http://guides.rubyonrails.org/working_with_javascript_in_rails.html