1

环顾了几个小时,阅读博客和许多其他 SO 问题都没有成功,我终于寻求帮助。

我相信我对 Rails 布局/渲染/屈服机制仍然缺乏一些了解。因此,这可能是一个愚蠢的问题。请再说一遍。

是否可以防止在每个页面请求上呈现部分内容?我的意思是,每次我点击我的应用程序上的链接时,布局和部分都会重新加载。

我的目标是有一个静态的侧边栏,通过渲染部分“第一次加载 application.html.erb”来填充它一次,然后只使用 ajax 更新它。

这是我的应用程序布局:

<!DOCTYPE html>
<html>
  <head>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title><%= content_for?(:title) ? yield(:title) : "GEN" %></title>
    <meta name="description" content="<%= content_for?(:description) ? yield(:description) : "GEN" %>">
    <%= stylesheet_link_tag "application", :media => "all" %>
    <%= javascript_include_tag "application" %>
    <%= csrf_meta_tags %>
  </head>
  <body class="darkbody">
    <header class="navbar navbar-fixed-top navbar-inverse">
      <nav class="navbar-inner">
        <div class="container-fluid">
          <%= render 'layouts/navigation' %>
        </div>
      </nav>
    </header>
    <main role="main">
      <div class="container-fluid">

         <div class="row-fluid">
          <div class="span3">

            <%= render partial: 'charts/dashboard', layout: false %>

          </div>

          <div class="span9">
            <div class="well well-small">
              <%= render 'layouts/messages' %>

              <%= yield %>  

            </div>
          </div>

        </div>

      </div>
    </main>
  </body>

</html>

“仪表板”部分应该加载一次并且永远不会再次呈现。换句话说,导航应用程序会更改/刷新 yield 部分中的内容,但不会更改/刷新主布局“部分”中的内容。

动机?仪表板使用辅助方法来显示一个在整个用户会话期间计算且从未更新的值。如果我得到很多重新加载,这个帮助程序会在每次用户点击时运行并强调应用服务器,即使返回相同的结果,确实会发生什么。

这是太疯狂还是太愚蠢?

此致,

广告

4

1 回答 1

2

实际上,它会在每个请求上从这个模板渲染 HTML,但是如果模板中显示的数据不需要一直是真实的,你可以尝试动作或片段缓存,如下所示:

  <div class="span3">
    <% cache 'dashboard' do %>
      <%= render partial: 'charts/dashboard', layout: false %>
    <% end %>
  </div>

您可以在 Rails 指南中阅读更多详细信息 ( http://guides.rubyonrails.org/caching_with_rails.html#fragment-caching )

于 2013-10-28T22:32:16.413 回答