我有一个模型entree
的coffeescript文件,它只是在另一个coffeescript文件中实例化一个类:
jQuery(document).ready ->
ch = new CepageHandling
ch.handleKeyPress()
handlePress
函数捕获控件上的keyup
个事件。
我有另一个模型vin
,我想在其中启用相同的功能。我很惊讶地看到我不需要做任何事情(它已经有相同的html),它已经在工作,即使vin
模型的coffeescript完全是空的。我假设即使我不在此页面上,entree
创建的javascript也会被调用。
我看到了scss
文件的相同行为,如果描述符匹配,则为一个模型定义的样式应用于其他模型。有人可以解释(或指向一些文章)这是资产在铁路中没有隔离的正常行为吗?我真的很难理解它是如何运作的。
答案 0 :(得分:1)
默认清单文件(application.js
等)执行require_tree .
,它将加载所有页面上的所有文件,在生产中将它们连接在一起等等。如果您想要隔离的东西,您将会需要在ready
处理程序中进行测试以在某些情况下跳过此代码,或者您需要更多清单(例如,不要使用application.js
)来封存每页的代码。我建议你仔细阅读asset pipeline Rails Guide的每一个字......需要阅读!
答案 1 :(得分:1)
这是因为清单文件 application.js ,更准确地说是在这行代码中:
//= require_tree .
这意味着 / assets / javascripts / 文件夹中包含的所有 .js 文件都会加载到您的视图中。
由于 entree.js 已加载并使用 JQuery文档就绪功能,它会在您的所有视图中搜索文件规则。
这意味着包含此 ch 元素的所有网页都会获得相同的行为。