如何将Javascript文件导入Haml视图?

我想在Haml视图中包含一些Javascriptfunction,但我不希望它插入到每个视图中。 我是否必须将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清单中。 根据http://guides.rubyonrails.org/asset_pipeline.html ,请记住在application.rb中将清单添加到config.assets.precompile中。

(在你的haml中):

 = javascript_include_tag 'somefile' 

(在config / application.rb中):

 config.assets.precompile += ['somefile.js'] 

如果你的javascript很小并且很简单,我建议你直接在HAML中包含javascript:

 :javascript alert('hi hi!') 

否则你应该使用资产管道。 它确保您的javascripts经过预处理,压缩和缩小 。 它还有助于保持javascripts组织良好(例如,脚本和供应商脚本之间的分离)和易于测试(使用jasmine / jasminerice / evergreen等测试框架)。 如果您是资产管道的新手, 这里有一个很好的读取=)