application.haml和application.html.haml之间的区别?

时间:2016-03-05 11:37:12

标签: javascript html ruby-on-rails haml ujs

多天以来,我试图理解为什么这样的简单链接:

link_to 'My Link', my_path(format: :js), remote: true

始终返回完整的HTML文档,而不是执行位于我的file.js.erb中的javascript:

alert('hello world')

[...]

经过数小时的调试后,我找到了原因:

我重命名我的主要布局文件,例如application.haml时,它会呈现完整的HTML文档:

Started GET "/my_path/2.js" for 127.0.0.1 at 2016-03-05 12:28:20 +0100
Processing by MyController#show as JS
  Rendered my_path/show.js.erb within layouts/application (0.1ms)
  Rendered layouts/_sidebar.html.erb (18.9ms)
  Rendered layouts/_headbar.haml (0.5ms)
  Rendered layouts/_flash_messages.html.haml (0.2ms)
  Rendered layouts/_footer.html.erb (0.1ms)
Completed 200 OK in 102ms (Views: 59.3ms | ActiveRecord: 2.9ms)

我重命名我的主要布局文件,例如application.html.haml时,它会正确执行javascript并运行我的 hello world popup

Started GET "/my_path/8.js" for 127.0.0.1 at 2016-03-05 12:28:34 +0100
Processing by MyController#show as JS
  Rendered my_path/show.js.erb (0.1ms)
Completed 200 OK in 24ms (Views: 21.8ms | ActiveRecord: 0.4ms)

根据布局的不同文件名,为什么javascript行为存在差异?

1 个答案:

答案 0 :(得分:2)

正如BroiSatse所说:

  

这不是javascript行为,它是rails搜索的方式   模板。首先搜索<action_name>.<templating-engine>   文件,然后是<action_name>.<format><templateing-engine>。所以当   你有没有格式的通用模板,它将被采用   格式。