html - Ruby 处理带计数的拆分列无序列表的方法?

标签 html css ruby-on-rails

我正在尝试使用 Ruby on Rails 中的 Bootstrap 4 设计一个侧边栏子菜单的页面,该子菜单需要展开/折叠、有一些要点并包含一个计数器。

所以最终它需要看起来像:

Alpha             4000
 * Major One      2000
    Minor One     500
    Minor Two     1500
 * Major Two      1000

现在我在 HTML/CSS 的无序列表方面考虑它,例如:

<ul>
 <li><a href="menu1" data-toggle="collapse">Major One</a></li>
  <ul class="collapse" id="menu1">
    <li>Minor One</li>
    <li>Minor Two</li>
  </ul>
 </li>
 <li>Major Two</li>
</ul>

我意识到我需要在无序列表中放入某种形式的计数器,并可能拆分我意识到的 ul li 标签上的列……必须有一种 Ruby 方法来处理这个问题。是否有一种更简洁的 Ruby 方法来创建一个无序列表,该列表有两列,包含折叠和计数?

最佳答案

从设置基本数据结构开始:

@things = [
  {
    label: "Alpha",
    counter: 4000,
    children: [
      {
        label: "Major One",
        count: 2000,
        children: [
          { label: "Minor One", count: 500 },
          { label: "Minor two", count: 1500 }
        ]
      },
      {
        label: "Major One",
        count: 1500
      }
    ]
  }
]

然后使用部分递归地创建列表的列表:

# layouts/application.html.erb
<ul>
  <%= render partial: 'menu_item', collection: @things, as: :item, locals: { level: 1 } %>
<ul>

# app/views/things/_menu_item.html.erb
<li class="<%= "level-#{level} n-#{item_counter}" %>">
  <a href="#"><%= item[:label] %></a>
  <%  if item[:children] %>
  <ul class="collapse">
    <%= render partial: 'menu_item',
        collection: item[:children],
        as: :item,
        locals: { level: level + 1 }
    %>
  </ul>
  <% end %>
</li>

class: "level-#{level} n-#{item_counter}" 只是一个示例,说明如何跟踪您所处的级别和索引。

输出是:

<ul>
  <li class="level-1 n-0">
    <a href="#">Alpha</a>
    <ul>
      <li class="level-2 n-0">
        <a href="#">Major One</a>
        <ul>
          <li class="level-3 n-0">
            <a href="#">Minor One</a>
          </li>
          <li class="level-3 n-1">
            <a href="#">Minor two</a>
          </li>
        </ul>
      </li>
      <li class="level-2 n-1">
        <a href="#">Major One</a>
      </li>
    </ul>
  </li>
<ul>

您当然可以向散列结构添加更多键以提供 href、包装器类和链接类等。

关于html - Ruby 处理带计数的拆分列无序列表的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52786287/

相关文章:

html - 悬停影响两个元素

javascript - 如何隐藏被单击按钮上的面板?

javascript - 页面重定向后 Jquery 不起作用

css - h1 文字重叠边框

html - 使用图像删除 HTML 图形标记下的空间

javascript - 文档加载后,某些内容滚动回 0,0

ruby-on-rails - Rails 5 事件管理员安装问题

javascript - 如何在事件掉落中给出条件

javascript - 在文本框中输入最后一个数字时,第一个数字会进入内部

html - 图片总是在容器中间