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
,等等)。