我想要将不同的布局应用到我的博客中。所以在博客控制器中我放了
layout: 'blog'
位于索引操作上方的博客控制器顶部。
当我物理刷新页面时,将应用博客布局。但是,如果我从主页链接到blog_path,布局不会应用,它仍然使用与主页相同的布局。同样,当我手动刷新页面时,它会应用布局。有什么建议吗?
答案 0 :(得分:2)
<强> Turbolinks 强>
问题是Turbolinks
Turbolinks是一个javascript库,它通过获取你的链接来工作,检查整个“页面”是否会改变,如果没有,只需将<body>
标记拉到所请求的资源。虽然很痛苦,但它是为效率而设计的:
Turbolinks可以更快地在您的Web应用程序中建立以下链接。 而不是让浏览器重新编译JavaScript和CSS 在每个页面之间进行更改,它会使当前页面实例保持活动状态 只替换头部的正文和标题。想想CGI vs 持久的过程。
-
Turbolinks的主要问题是它通常会重新加载您网页的<body>
标记,这是您在此处看到的问题。
在大多数用例中,这将破坏页面上的JS / CSS;但是,对您而言,问题似乎是能够加载其他行为的layout
<强>修正强>
对此的修复更多的是测试(我以前从未使用过具有layout
特定问题的Turbolinks)
我建议这样做:
#app/assets/javascripts/application.js
//require turbolinks -> REMOVE THIS LINE
#app/views/layouts/application.html.erb
<head>
...
<%= stylesheet_link_tag "application" %> #-> remove turbolinks references
<%= javascript_include_tag "application" %> #-> remove turbolinks references
</head>
这将基本上删除对Turbolinks的任何引用,允许您测试以确定这是否确实是问题。我知道它是,因为在页面刷新时应用了布局是Turbolinks问题的标志性标志(如果刷新页面,Turbolinks无法工作);这只是一个如何使用它的问题
答案 1 :(得分:0)
在layout文件夹中,如果你定义了blog.html.erb,它会在BlogController中加载它。
答案 2 :(得分:0)
您必须拥有app/views/layout/blog.html.erb
布局文件。