为Rails 5管理javascript/coffeescript代码的有效方法?
我正在Rails 5.0.2中构建一个web应用程序。我的项目有以下JS文件: 此外,我自己的每个JS文件都有类似的模式,如下所示:为Rails 5管理javascript/coffeescript代码的有效方法?,javascript,jquery,ruby-on-rails,ruby-on-rails-5,asset-pipeline,Javascript,Jquery,Ruby On Rails,Ruby On Rails 5,Asset Pipeline,我正在Rails 5.0.2中构建一个web应用程序。我的项目有以下JS文件: 此外,我自己的每个JS文件都有类似的模式,如下所示: $(function () { var init = function () { // my code, I want to run on specific page load i.e. /remarks $('form#cf_remarks_form').validate(validate_options); }
$(function () {
var init = function () {
// my code, I want to run on specific page load i.e. /remarks
$('form#cf_remarks_form').validate(validate_options);
};
init();
document.addEventListener("turbolinks:load", function () {
init();
});
});
我对使用JS资产有以下保留/问题:
所以,我想知道rails开发人员对于js资产,特别是使用rails 5的人,遵循什么实践?如果您的回答能解决我上面提到的问题,那将非常有帮助。在回答您的问题时:
document.addEventListener("turbolinks:load", function() {
console.log('Loads each time');
});
见文件:
这里有一个权衡。您可以将特定于页面的js包含在内联或许多单独的文件中,但浏览器必须对其发出另一个请求,并且可能不会将其包含在缓存中。Rails选择保持简单,并假设每个页面缓存一个文件比整个站点上50个不同的js文件要好。YMMV但这似乎工作得很好,所以我先试试Rails方法
如果您觉得不方便的话,您可以通过各种方式来处理Rails设置。我建议将大部分js放在一个组中,但您也可以(按照复杂性的顺序):
我关心的一点是“不需要两个init()调用”。我已经测试过,如果您刷新页面或通过直接URL打开页面,turbolinks:load中包装的任何内容都不会执行。