我想在 Haml 视图中包含一些 Javascript 功能,但我不希望它插入到每个视图中。我是否必须将 Javascript 文件放在 public/javascripts 中,或者我可以将它放在 app/assets/javascripts 中以使其对用户隐藏,并且仍然从 haml 视图文件中引用?
如果可能的话,你会怎么做这两个选项?
我想在 Haml 视图中包含一些 Javascript 功能,但我不希望它插入到每个视图中。我是否必须将 Javascript 文件放在 public/javascripts 中,或者我可以将它放在 app/assets/javascripts 中以使其对用户隐藏,并且仍然从 haml 视图文件中引用?
如果可能的话,你会怎么做这两个选项?
你应该只使用
!!!
%html
%head
= javascript_include_tag "my_js_file"
如果它特定于一个地方,你应该使用content_for
!!!
%html
%head
= yield(:javascripts)
然后在你看来
- content_for :javascripts do
= javascript_include_tag "my_js_file"
如果您希望将 javascript 直接包含在 haml 中,您可以使用:javascript
:javascript
$(function() { alert("js inside haml"); }
您可以将其放入局部,然后仅渲染局部以保持视图清洁。
如果您只想引用 javascript 并让浏览器将其拉入,您应该javascript_include_tag
像往常一样使用。在这里,您需要将 javascript 文件设为清单,而不是要求将其放入application.js
清单中。config.assets.precompile
请记住根据http://guides.rubyonrails.org/asset_pipeline.html将清单添加到您的 application.rb
(在你的haml中):
= javascript_include_tag 'somefile'
(在 config/application.rb 中):
config.assets.precompile += ['somefile.js']
如果你的 javascript 很小而且很简单,我建议直接在 HAML 中包含 javascript:
:javascript
alert('hi hi!')
否则,您应该使用资产管道。它确保您的 javascripts 是经过预处理、压缩和缩小的。它还有助于保持您的 javascript 井井有条(例如,将您的脚本和供应商脚本分开)并易于测试(使用jasmine / jasminerice / evergreen等测试框架)。如果您是资产管道的新手,这里是一个很好的阅读 =)