我有很多$(function () {}); (document.ready)
个javascript函数在我的不同网页中是相同的。但是我不知道如何“分享”它们,这样我就可以将它们保存在一个地方,而不必每次都复制+粘贴它们。
即。在Rails中,我尝试将一些共享代码放在我的javascript资源管道中,但它不会运行(除非我在加载后刷新页面一次)。但是,当前页面的唯一javascript确实会运行。
有什么想法吗?
更新
Saiqul的回答是有效的,但我最终做的和我最好的做法是:https://stackoverflow.com/a/18834209/3776339
答案 0 :(得分:1)
你使用的是哪种导轨版本?
如果rails 4+,你需要更多文档事件监听器,如$(document).on('page:change', function(){})
因为rails 4+使用turbolinks gem来加快页面加载速度,所以你的jQuery.ready()监听器只在第一页执行加载,不在另一个页面中工作。
turbolinks提供了一些活动:
page:before-change
page:fetch
开始提取新的目标网页page:receive
页面已从服务器获取,但尚未解析- 只要page:change是jQuery的ajaxSucess上的PLUS,如果jQuery可用(否则你可以在你自己的代码中调用XMLHttpRequest时手动触发它),
page:change
页面已被解析并更改为新版本和DOMContentLoadedpage:update
被触发。page:load
在加载过程结束时被解雇。
或者您可以使用jquery.turbolinks gem,当Turbolinks触发页面时会触发jQuery.ready():load event。
更新
这是我在my rails app
中的js代码我封装了必须在单个函数中的每个页面上运行的js代码
var ready = function(){
$('somEl').on('change', function(){
....
});
$('otherEl').on('click', function(){
....
});
});
然后执行三个事件监听器
$(document).ready(ready) // jquery event
$(document).on("page:fetch", function(){ // turbolinks event
ready();
// you can add more code here, which will be fired when turbolinks starting fecth new page
}
$(document).on("page:change", function(){ // turbolinks event
ready();
// you can add more code here too
}
答案 1 :(得分:0)
试试这个问题,看看是否有帮助: Include JavaScript in Ruby (on Rails)
此博客还讨论了如何最好地添加JS: Ruby on Rails layouts and JavaScript includes
还有一个谷歌搜索结果: Adding javascript to rails