javascript - 如何将多维数组显示为表格?

标签 javascript arrays json tempo

这个问题已经困扰我好几天了...我有以下 JSON,我尝试使用 Tempo.js 将其渲染为表格,但始终没有渲染任何内容:

[  
   {  
      "id":"xxxxxxxxxxxxxxxxxxxxxxxxxx",
      "name":"Family One",
      "parents":[  
     {  
        "id":"yyyyyyyyyyyyyyyyyyyyyyyyyy",
        "name":"John Doe",
        "children":[  
           {  
              "id":"zzzzzzzzzzzzzzzzzzzzzzzzz",
              "name":"Fabrice A",
              "description":"Good kid",
              "Age":"20",
              "Weight":"60"
           }
        ]
     },
     {  
        "id":"hhhhhhhhhhhhhhhhhhhhhhhhhh",
        "name":"Jane Doe",
        "children":[  
           {
              "id":"wwwwwwwwwwwwwwwwwwwwwwww",
              "name":"Maurice A",
              "description":"Bad kid",
              "Age":"22",
              "Weight":"50"
           }
        ]
     }
  ]
   },
   {  
      "id":"xxxxxxxxxxxxxxxxxxxxxxxxxx2",
      "name":"Family Two",
      "parents":[  
     {  
        "id":"yyyyyyyyyyyyyyyyyyyyyyyyyy2",
        "name":"Sonny Doe",
        "children":[  
           {  
              "id":"zzzzzzzzzzzzzzzzzzzzzzzzz2",
              "name":"Juan B",
              "description":"Good kid",
              "Age":"30",
              "Weight":"70"
           },
           {  
              "id":"zzzzzzzzzzzzzzzzzzzzzzzzz3",
              "name":"Alberto B",
              "description":"Fine kid",
              "Age":"20",
              "Weight":"60"
           },
           {  
              "id":"zzzzzzzzzzzzzzzzzzzzzzzzz4",
              "name":"Roberto B",
              "description":"Medium kid",
              "Age":"10",
              "Weight":"50"
           }
        ]
     }
  ]
   }
]

表格应该看起来像这样:

 _______________________________________________________________________________________
| FAMILY NAME |   PARENTS   | CHILD NAME | CHILD DESCRIPTION | CHILD AGE | CHILD WEIGHT |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
| Family One  | John Doe    | Fabrice A  | Good kid          | 20        | 60           |
|             |''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
|             | Jane Doe    | Maurice A  | Bad kid           | 22        | 50           |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
| Family Two  | Sonny Doe   | Juan B     | Good kid          | 30        | 70           |
|             |             | Alberto B  | Fine kid          | 20        | 60           |
|             |             | Roberto B  | Medium kid        | 10        | 50           |
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

请注意家庭单元格如何延伸以容纳多个父行,以及父单元格如何延伸以容纳多个子行。 我在js中准备了一个名为familyTree的变量中的JSON,然后调用Tempo.prepare('family-list').render(familyTree); 不,我已经阅读了 tempo.js 的所有文档(不是太长),但我仍然没有找到正确渲染表格的方法。这是我到目前为止所得到的:

<div id="family-list">
   <table id="families">
       <tr data-before-template='data-before-template'>
       <th>
           FAMILY NAME
       </th>
       <th>
           PARENTS
       </th>
       <th>
           CHILD NAME
       </th>
       <th>
           CHILD DESCRIPTION
       </th>
       <th>
           CHILD AGE
       </th>
       <th>
           CHILD WEIGHT
       </th>
   </tr>
   <tr data-template='data-template'>
       <td id="family-column">
           {{name}}
       </td>
       <td id="parent-column" data-template-for='parents'>
           {{name}}
       </td>
       <td colspan="4">
           <table id='children-table' data-template-for="children">
               <tr>
                   <td>
                      {{name}}
                   </td>
                   <td>
                       {{description}}
                   </td>
                   <td>
                      {{age}}
                   </td>
                   <td>
                       {{weight}}
                   </td>
               </tr>
           </table>
       </td>
   </tr>

我以前用过节奏。我什至将它与 wkhtmltopdf 混合以呈现一些漂亮的 pdf 文件。但我就是无法解决这个问题。如果你们中有人经历过类似的事情..您能分享一下您的经验吗?非常感谢。

最佳答案

使用 tempo.js 并不适合在表中呈现分层数据。为了呈现分层数据,tempo.js 要求 HTML 元素也存在于分层结构中。在处理表格时,这并不理想,因为在表格单元格内创建表格最终会导致列对齐问题。您可以通过固定每列的宽度来在一定程度上解决对齐问题,但这并不是一个完美的解决方案。

如上所述,我已经修复了您的 HTML 标记,以使用 tempo.js 呈现 JSON 数据。请参阅以下更改 (jsfiddle here):

<div id="family-list">
  <table id="families">
    <tr data-before-template='data-before-template'>
      <th width="100px">
        FAMILY NAME
      </th>
      <th width="100px">
        PARENTS
      </th>
      <th width="100px">
        CHILD NAME
      </th>
      <th width="150px">
        CHILD DESCRIPTION
      </th>
      <th width="50px">
        CHILD AGE
      </th>
      <th width="50px">
        CHILD WEIGHT
      </th>
    </tr>
    <tr data-template='data-template'>
      <td id="family-column">
        {{name}}
      </td>
      <td colspan="5">
        <table cellpadding="0">
          <tr data-template-for='parents'>
            <td width="100px">
              {{name}}
            </td>
            <td>
              <table id='children-table' cellpadding="0">
                <tr data-template-for="children">
                  <td width="100px">
                    {{name}}
                  </td>
                  <td width="150px">
                    {{description}}
                  </td>
                  <td width="50px">
                    {{Age}}
                  </td>
                  <td width="50px">
                    {{Weight}}
                  </td>
                </tr>
              </table>
            </td>
          </tr>
        </table>
      </td>   
    </tr>
  </table>
</div>

关于javascript - 如何将多维数组显示为表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27252792/

相关文章:

javascript - 虚线将图表上的空值转换为零

javascript - 在 Angular Material Accordion 中打开第一个附加的扩展面板

java - Java中对2位数字的数组进行排序

javascript - 通过从 PHP 返回的 Json 回调 Javascript 函数

javascript - 在 Angular 6 中使用 patchValue 时发送数据格式错误

javascript - 如何将具有嵌套对象复杂的数组对象转换为 CSV 文件

python - 如何对列表和 Numpy 数组进行列堆叠并保存txt?

arrays - 查询所有数组项都大于指定条件的地方

jquery - knockout 帖子 JSON 表单数据帖子 null

json - 以下错误可能是什么问题:顶级值后的无效字符“-”?