资产管道确实将所有内容编译到单个 JS 文件中,因此没有内置方法可以将某些 JavaScript 文件的执行限制为特定操作。
不过,有一种方法可以解决这个问题。首先,将这个辅助方法添加到application_helper.rb:
# application_helper.rb
def body_classes(*args)
return (@body_classes || []).join(" ") if args.empty?
@body_classes ||= []
@body_classes += args.map { |klass| klass.to_s.gsub("_", "-") }
@body_classes.uniq!
nil
end
并在你的布局中使用它:
<!-- application.html.erb -->
<body class="<%= body_classes %>">
<!-- ... -->
</body>
有了这个,你可以在你的模板中指定某些body类,添加到<body>标签中:
<!-- your_action.html.erb -->
<%= body_classes :my_custom, :action_class %>
<h1>Your action</h1>
<!-- ... -->
上面的代码会将以下类添加到<body>:
<body class="my-custom action-class">
最后,您可以在 JS 代码中测试这些 body 类:
// your_action.js
if($("body").hasClass("my-custom")) {
// run code specific to pages with the 'my-custom' class
}