【发布时间】:2018-01-15 02:33:42
【问题描述】:
我正在 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);
};
init();
document.addEventListener("turbolinks:load", function () {
init();
});
});
我对使用 JS 资产有以下保留/疑问:
Rails 默认附加(并因此运行)所有页面上的所有 js 文件以实现相同的布局。通过使用自定义模式或使用默认模式只在特定资源/页面上添加相关的js是否很好?
如果所有 js 组合并链接到每个页面,我需要非常具体/谨慎,同时使用 jQuery 选择器作为一个页面的选择 $('div.custom input.no-search') 可能会让我发疯如果我不想在另一个页面上运行方法有很多代码和限定标记,则提到的选择器正在选择。
Rails 5 对普通页面使用 ajax 加载。如果页面 /company 有文件 company.js,它将在第一页执行,例如 /home。当我转到 /company 时,company.js 中编写的行将不会再次执行。因此,我必须使用 turbolinks:load 事件侦听器并将每个 UI 初始化和 UI 附加事件封装在一个方法中,以便在 turbolinks:load 以及正常调用中调用。 (如代码sn-p所示)
所以,我想知道 Rails 开发人员对 js 资产特别是使用 Rails 5 的人遵循什么做法?如果您的回答能解决我上面提到的问题,那将是非常有帮助的。
【问题讨论】:
标签: javascript jquery ruby-on-rails ruby-on-rails-5 asset-pipeline