Ruby on rails 为什么Rails资产不在模型之间隔离?

Ruby on rails 为什么Rails资产不在模型之间隔离?,ruby-on-rails,asset-pipeline,Ruby On Rails,Asset Pipeline,我有一个模型entre的咖啡脚本文件,它只是在另一个咖啡脚本文件中实例化一个类: jQuery(document).ready -> ch = new CepageHandling ch.handleKeyPress() handlePress功能捕获控件上的keyup事件 我有另一个型号vin,我想在那里启用相同的功能。我惊讶地发现,我不需要做任何事情(它已经有了相同的html),它已经开始工作了,即使vin模型的咖啡脚本完全是空的。我假设为entre创建的javascript

我有一个模型
entre
的咖啡脚本文件,它只是在另一个咖啡脚本文件中实例化一个类:

jQuery(document).ready ->
  ch = new CepageHandling
  ch.handleKeyPress()
handlePress
功能捕获控件上的
keyup
事件

我有另一个型号
vin
,我想在那里启用相同的功能。我惊讶地发现,我不需要做任何事情(它已经有了相同的html),它已经开始工作了,即使
vin
模型的咖啡脚本完全是空的。我假设为
entre
创建的javascript即使我不在这个页面上也会被调用


我在
scss
文件中看到了相同的行为,如果描述符匹配,则为一个模型定义的样式将应用于其他模型。有人能解释一下(或指向某篇文章)资产在rails中不被隔离是否是正常行为吗?我真的很难理解它是如何工作的。

默认清单文件(
application.js
等)确实需要
树。
它将加载所有页面上的所有文件,并在生产中将它们全部合并,等等。如果您希望将内容隔离,则需要在
ready
处理程序中放置一个测试,以便在某些情况下跳过此代码,或者需要更多清单(例如,不要使用
application.js
)来孤立每页的代码。我建议你仔细阅读每一个单词。。。必读

之所以会发生这种情况,是因为清单文件application.js,更准确地说,在这行代码中:

//= require_tree .
这意味着/assets/javascripts/文件夹中包含的所有.js文件都将加载到您的视图中。
由于您的entre.js已经加载,并且使用JQuery document ready函数,它会在所有视图中搜索您的文件规则。

这意味着包含此ch元素的所有页面都将获得相同的行为。

我已经阅读了它,但我必须承认我可能跳过了这一部分。谢谢!通常,对于一个复杂的应用程序,您会发现您需要的不仅仅是一个清单。一开始只测试body id或其他东西是可以的,但是当你得到一个真正的应用程序时,你可能会希望网站的不同区域有不同的包(
billing.js
billing.css
admin.js
,等等)。