代码之家  ›  专栏  ›  技术社区  ›  Andrea T

使用Bootstrap和Thymeleaf从列表中动态创建选项卡

  •  3
  • Andrea T  · 技术社区  · 7 年前

    假设我有一个对象列表“Bar”,每个Bar有两个属性“title”和“content”: 如何为列表中的每个栏动态创建带有调色板的选项卡?

    wrong tab 这里是犯罪代码:

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
      <head>
        <title>Bar's tab</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous" />
        <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.11.0/umd/popper.min.js" integrity="sha384-b/U6ypiBEHpOf/4+1nzFpr53nxSS+GLCkfwBdFNTxtclqqenISfwAzpKaMNFNmj4" crossorigin="anonymous"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/js/bootstrap.min.js" integrity="sha384-h0AbiXch4ZDo7tp9hKZ4TsHbi047NrKGLO3SEJAg45jXxnGIfYzk4Si90RDIqNm1" crossorigin="anonymous"></script>
      </head>
      <body>
       <div class="container">
    
          <ul class="nav nav-tabs" >
            <div th:each="bar: ${bar_list}">
              <li class="nav-item">
                <a class="nav-link" th:href="@{'#'+ ${bar.title}}" data-toggle="tab"><label th:text="${bar.title}">bar title</label></a>
              </li>
            </div>
          </ul>
    
          <div class="tab-content" >
            <div th:each="bar : ${bar_list}">
                  <div class="tab-pane fade active" th:id="${bar.title}">
                      <p th:text = "${bar.content}">bar content</p> 
                  </div>          
            </div>
          </div> 
    
        </div>
      </body>
    </html>
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Jakub Ch.    7 年前

    请删除多余的、封闭的div(那些包含 th:each 属性)。此外,只应显示一个选项卡窗格 active 一开始,并不是所有人。你应该在里面添加一些条件 th:classappend 为了实现这一点。

    <body>

    <div class="container">
        <ul class="nav nav-tabs" >
            <li class="nav-item" th:each="bar, barStat: ${bar_list}">
                <a class="nav-link" th:classappend="${barStat.first} ? 'active'" th:href="@{'#'+ ${bar.title}}" data-toggle="tab"><label th:text="${bar.title}">bar title</label></a>
            </li>
        </ul>
    
        <div class="tab-content" >
            <div class="tab-pane fade" th:classappend="${barStat.first} ? 'show active'" th:id="${bar.title}" th:each="bar, barStat : ${bar_list}">
                <p th:text = "${bar.content}">bar content</p> 
            </div>
        </div> 
    </div>