【问题标题】:Layout not being applied on page load页面加载时未应用布局
【发布时间】:2014-08-13 00:31:43
【问题描述】:

我想将不同的布局应用于我的博客。所以在博客控制器中我放了

layout: 'blog'

在我的博客控制器顶部的索引操作上方。

当我物理刷新页面时,会应用博客布局。但是,如果我从主页链接到 blog_path,则不会应用布局,它仍然使用与主页相同的布局。同样,当我手动刷新页面时,它会应用布局。有什么建议吗?

【问题讨论】:

  • 您启用了 turbolinks 吗?如果是这样,这可能是您的问题。

标签: ruby-on-rails ruby ruby-on-rails-4 erb


【解决方案1】:

Turbolinks

问题将是Turbolinks

Turbolinks 是一个 javascript 库,它通过获取链接来工作,检查整个“页面”是否会改变,如果没有,只需将 <body> 标记从请求的资源中拉出。虽然很痛苦,但它是为提高效率而设计的:

Turbolinks 使您的网络应用程序中的链接更快。 而不是让浏览器重新编译 JavaScript 和 CSS 在每次页面更改之间,它使当前页面实例保持活动状态,并且 仅替换头部的正文和标题。想想 CGI 与 持续过程。

--

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 将无法工作);这只是如何使用它的问题

【讨论】:

    【解决方案2】:

    如果您在布局文件夹中定义 blog.html.erb,它将在 BlogController 中加载它。

    【讨论】:

      【解决方案3】:

      您必须有一个app/views/layout/blog.html.erb 布局文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-10
        • 2021-12-12
        相关资源
        最近更新 更多