为什么Rails资产不会在模型之间隔离?

时间:2012-06-20 17:18:40

标签: ruby-on-rails asset-pipeline

我有一个模型entree的coffeescript文件,它只是在另一个coffeescript文件中实例化一个类:

jQuery(document).ready ->
  ch = new CepageHandling
  ch.handleKeyPress()

handlePress函数捕获控件上的keyup个事件。

我有另一个模型vin,我想在其中启用相同的功能。我很惊讶地看到我不需要做任何事情(它已经有相同的html),它已经在工作,即使vin模型的coffeescript完全是空的。我假设即使我不在此页面上,entree创建的javascript也会被调用。

我看到了scss文件的相同行为,如果描述符匹配,则为一个模型定义的样式应用于其他模型。有人可以解释(或指向一些文章)这是资产在铁路中没有隔离的正常行为吗?我真的很难理解它是如何运作的。

2 个答案:

答案 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 元素的所有网页都会获得相同的行为。