每当我构建Rails应用程序时,我都会遇到这个问题一段时间。基本上发生的情况是,每次加载应用程序时,您都会使用某种javascript代码,无论它是工具提示还是日期选择器,它只会在您第一次打开页面或刷新页面之前加载它

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

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


该代码将在第一次加载页面或刷新页面之前正常加载,但是,如果在页面之间来回切换,则由于某种原因该代码将无法加载。如在日期选择器中一样,直到刷新页面后才再次出现。

在开发和生产中都会发生这种情况。有人知道发生了什么事,并请解释一下吗?难道我做错了什么?

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

最佳答案

这是因为Turbolinks使您的链接变废为宝,因此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

10-05 20:41
查看更多