16

我想在 Haml 视图中包含一些 Javascript 功能,但我不希望它插入到每个视图中。我是否必须将 Javascript 文件放在 public/javascripts 中,或者我可以将它放在 app/assets/javascripts 中以使其对用户隐藏,并且仍然从 haml 视图文件中引用?

如果可能的话,你会怎么做这两个选项?

4

3 回答 3

31

你应该只使用

!!!
%html
  %head
    = javascript_include_tag "my_js_file"

如果它特定于一个地方,你应该使用content_for

!!!
%html
  %head
    = yield(:javascripts)

然后在你看来

- content_for :javascripts do
  = javascript_include_tag "my_js_file"
于 2012-07-12T15:47:18.857 回答
11

直接包含

如果您希望将 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']
于 2012-07-12T15:54:55.833 回答
0

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

:javascript
  alert('hi hi!')

否则,您应该使用资产管道。它确保您的 javascripts 是经过预处理、压缩和缩小的。它还有助于保持您的 javascript 井井有条(例如,将您的脚本和供应商脚本分开)并易于测试(使用jasmine / jasminerice / evergreen等测试框架)。如果您是资产管道的新手,这里是一个很好的阅读 =)

于 2012-07-12T16:22:07.587 回答