每当我构建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