2016-03-05 29 views
5

由于许多天,我试图理解为什么这样一个简单的链接:application.haml和application.html.haml之间的区别?

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

总返回,而不是执行JavaScript位于我file.js.erb完整的HTML文档:

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弹出

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

这不是JavaScript行为,它是如何搜索模板。首先搜索'。<模板引擎>'文件,然后搜索'<模板引擎>'。因此,如果您的通用模板没有格式,则会采用所有格式。 – BroiSatse

+0

如果其中一个视图模板缺失,轨道应报告错误,告诉它如何搜索它,包括路径,格式等。使用这些信息,您将知道搜索顺序。 – canoe

回答

1

正如BroiSatse说:

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

相关问题