我的应用程序有很多控制器,Rails为每个控制器创建一个css和一个js(coffee)文件。
根据我的理解,Rails仅加载特定于控制器的JS文件(http://guides.rubyonrails.org/v3.2.8/asset_pipeline.html#how-to-use-the-asset-pipeline)。
我有一个反馈控制器,在视图中我使用javascript_include_tag加载和外部JS库。在feedback.js中我使用这个库。工作很棒。
但是现在如果我导航到另一个控制器,我得到一个JS错误,说找不到feedback.js中使用的函数。
如果我不在反馈控制器中,为什么Rails会尝试加载我的feedback.js?
答案 0 :(得分:1)
Rails资产管道不会为每个控制器加载控制器特定的JS文件。它在每个页面上加载application.js
中所需的所有JS文件。按照惯例,它会在您创建新资源时创建一个以资源命名的JS文件,以帮助您组织与每个控制器视图相关的JS代码。但同样,默认情况下,每个使用application.js
的页面都会加载JS代码。
您可以创建特定于控制器的JS文件,但您必须在application.rb
的预编译部分中定义它们,并确保它们不包含在application.js
中。
示例:
application.rb中:
module YourApp
class Application < Rails::Application
# ...
config.assets.precompile += %w(feedback.js)
end
end
end
然后在您的application.js
中删除//= require feedback
,默认情况下会feedback.js
加载feedback.js
。最后,您必须使用javascript_include_tag
手动将$xml->n->n[0]
包含在需要它的视图中,就像您使用额外的库一样。