【发布时间】:2013-04-29 19:56:55
【问题描述】:
我想知道对于以下问题的当前解决方案是否有更优雅的解决方案
问题:使用 Mustache 从动态数组生成动态表:
- 总列数未知
- 只有一两个列名是已知的并且必须有条件地呈现
- 不得使用辅助函数
- 数据仅以数组形式提供。不是模型类
具有可变列数的典型数据集,其中 ID 是唯一知道始终提供的列:
[id*] [Col-1] [Col-2] [Col-3] ...(more)
1 'Foo' 'Bar' 'Baz' ...(more)
2 'Foo' 'Bar' 'Baz' ...(more)
3 'Foo' 'Bar' 'Baz' ...(more)
...
(more)
当前解决方案:混合使用可变键名和常量键名 在下面的示例中,变量键基于从数据源动态提供的各种列名,它们是(“id”;“name”;“legal_name”;“email”;“signon_email”;“editable”)和常量键名是“字段”
示例数组:
array (size=6)
0 =>
array (size=2)
'id' => string '10' (length=2)
'field' => string 'id' (length=2)
1 =>
array (size=2)
'value' => string 'J. Doe' (length=8)
'field' => string 'name' (length=8)
2 =>
array (size=2)
'value' => string 'Jane Doe' (length=8)
'field' => string 'legal_name' (length=8)
3 =>
array (size=2)
'value' => string 'Jane@Doe.com' (length=12)
'field' => string 'email' (length=12)
array (size=6)
0 =>
array (size=2)
'id' => string '11' (length=2)
'field' => string 'id' (length=2)
1 =>
array (size=2)
'value' => string 'Jon Doe' (length=8)
'field' => string 'name' (length=8)
2 =>
array (size=2)
'value' => string 'John Doe' (length=8)
'field' => string 'legal_name' (length=8)
3 =>
array (size=2)
'value' => string 'John@Doe.com' (length=12)
'field' => string 'email' (length=12)
模板:
{{#rows}}
<tr>{{#fields}}
<td>{{#id}}<a href="foo/{{id}}">{{id}}</a>{{/id}}
{{^id}}{{field}}: {{value} {{/id}}
</td>
{{/fields}}
</tr>
{{/rows}}
结果:
<tr>
<td><a href="foo/10">10</a></td>
<td>name: J Doe</td>
<td>legal_name: Jane Doe</td>
<td>email: Jane@Doe.com</td>
</tr>
<tr>
<td><a href="foo/11">11</a></td>
<td>name: Jon Doe</td>
<td>legal_name: John Doe</td>
<td>email: John@Doe.com</td>
</tr>
数据冗余不是问题,因为数据集非常小。最重要的是,我们想要一个语言中立的解决方案(没有 lambda)。
【问题讨论】: