加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 渲染:收集包装每个项目?

发布时间:2020-12-17 03:12:58 所属栏目:百科 来源:网络整理
导读:目前我正在使用: % @items.each do |item| % li class="list-item" %= render :partial = '/widgets/vertical_widget',:object = item % /li% end % 在页面上渲染大约20个项目(在同一页面上还有另外20个不同的小部件). 当我查看我的服务器日志时,每个小部件
目前我正在使用:

<% @items.each do |item| %>
  <li class="list-item">
    <%= render :partial => '/widgets/vertical_widget',:object => item %>
  </li>
<% end %>

在页面上渲染大约20个项目(在同一页面上还有另外20个不同的小部件).

当我查看我的服务器日志时,每个小部件渲染显示约400毫秒,页面总计约为20毫秒.从我读过的内容:集合而不是循环:对象应该有助于改善那些时间,但是如果我使用:集合,我不知道如何在LI中包装小部件的每个实例.从未将网站上使用的窗口小部件放在列表中,因此在窗口小部件代码中包含LI是没有意义的.

我可以直接在窗口中包含窗口小部件代码而不是部分代码但是我不想在多个位置进行代码更新.

任何其他提高性能的想法将不胜感激!

解决方法

试试content_tag:

#some_file.html.erb

<ul>
<%= render :partial => 'widgets/vertical_widget',:collection => @items,:locals => { :wrap_in => :li } %>
</ul>



#/widgets/vertical_widget.html.erb

#First,render and capture the content once.
<% @rendered_content = capture do %>
  #render the item here
<% end %>

#Next,decide if the content rendered above should be wrapped in a tag or not
#If the "wrap_in" variable was passed-in and it is not nil/empty,then use that
#value for the tag; else do not wrap the content in a tag
<% if defined?(wrap_in) && !wrap_in.blank? %>
  <%= content_tag wrap_in do %>
    <%= @rendered_content %>
  <% end %>
<% else %>
    <%= @rendered_content %>
<% end %>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读