如何在 Meteor Spacebars 模板中迭代未知的 object?
How do I iterate over an unknown object in a Meteor Spacebars template?
所以我有一个流星Collection。 collection 中的每个 object/document 都可以有一个未知的结构。也就是说,我不知道每个属性的名字,也不知道有多少,直到运行时。
本质上,collection 中的每个 object 都是根据人们通过我的 front-end 页面(通过 CSV 上传,效果很好)提供的任意数据创建的。所以我没有在 Meteor 启动时初始化 collection。
现在我想在我的 HTML 页面中创建一个 table,它呈现 collection,但没有我 pre-defining 需要多少列以及他们叫什么名字。
那么如何在我的 Spacebars/HTML 模板中动态设置列的数量和名称?
下面是我在模板方面的进展:
<table>
{{#each rows}}
{{> row}}
{{/each}}
</table>
...和模板:
<template name="row">
{{#if header}} <!-- header is explicitly set, so this is fine -->
<th>
{{#each WHAT?}}
<td>{{???}}</td>
{{/each}}
</th>
{{else}}
<tr>
{{#each WHAT?}}
<td>{{???}}</td>
{{/each}}
</tr>
{{/if}}
</template>
我试图在 Spacebars 和 Blaze 文档中找到任何参考,但所有示例总是要求我知道 get-go.
中的列名称
有什么想法吗?
编辑:
这是一个示例 object,我通过 header 属性:
明确识别为 header
...和 "rows" 看起来像这样:
所以我显然在撒谎,因为我的 property/column 名字总是索引号。
再回答一个问题:
一旦确定了数据集(collection 填充),所有 object 都具有相同数量的属性(即想象一个 csv table,这是我的数据始终来自的地方) .
由于您的属性除了索引外没有任何价值,所以这不是一个很好的对象用例。如果您必须坚持使用模式(或进行深度嵌套更新,尽管我不确定您如何...),请遵循 Christian 的建议。否则,我会让前端给你数组或在 post-process.
中将你的对象转换为数组
data = [['uno', 'dos', 'tres'], ['wexfd', 'foobar', 'etc.']]
然后,您可以嵌套 each
帮助程序并使用 this
访问原语。超级干净简单。
从 mongo 数据库数据建模 pov 可以通过将变量字段粘贴到数组中来轻松改进此设计。即
{ items:
[
"wexfr",
"123x",
"ewfxc",
"rgc"
],
_id: "NYz84Qhu901MPab",
header: false,
createdAt: "2015-04-08T19:46:24"
}
然后你可以有这样的模板:
{{#each row}}
{{#each items}}
所以我有一个流星Collection。 collection 中的每个 object/document 都可以有一个未知的结构。也就是说,我不知道每个属性的名字,也不知道有多少,直到运行时。
本质上,collection 中的每个 object 都是根据人们通过我的 front-end 页面(通过 CSV 上传,效果很好)提供的任意数据创建的。所以我没有在 Meteor 启动时初始化 collection。
现在我想在我的 HTML 页面中创建一个 table,它呈现 collection,但没有我 pre-defining 需要多少列以及他们叫什么名字。
那么如何在我的 Spacebars/HTML 模板中动态设置列的数量和名称?
下面是我在模板方面的进展:
<table>
{{#each rows}}
{{> row}}
{{/each}}
</table>
...和模板:
<template name="row">
{{#if header}} <!-- header is explicitly set, so this is fine -->
<th>
{{#each WHAT?}}
<td>{{???}}</td>
{{/each}}
</th>
{{else}}
<tr>
{{#each WHAT?}}
<td>{{???}}</td>
{{/each}}
</tr>
{{/if}}
</template>
我试图在 Spacebars 和 Blaze 文档中找到任何参考,但所有示例总是要求我知道 get-go.
中的列名称有什么想法吗?
编辑: 这是一个示例 object,我通过 header 属性:
明确识别为 header...和 "rows" 看起来像这样:
所以我显然在撒谎,因为我的 property/column 名字总是索引号。
再回答一个问题: 一旦确定了数据集(collection 填充),所有 object 都具有相同数量的属性(即想象一个 csv table,这是我的数据始终来自的地方) .
由于您的属性除了索引外没有任何价值,所以这不是一个很好的对象用例。如果您必须坚持使用模式(或进行深度嵌套更新,尽管我不确定您如何...),请遵循 Christian 的建议。否则,我会让前端给你数组或在 post-process.
中将你的对象转换为数组data = [['uno', 'dos', 'tres'], ['wexfd', 'foobar', 'etc.']]
然后,您可以嵌套 each
帮助程序并使用 this
访问原语。超级干净简单。
从 mongo 数据库数据建模 pov 可以通过将变量字段粘贴到数组中来轻松改进此设计。即
{ items:
[
"wexfr",
"123x",
"ewfxc",
"rgc"
],
_id: "NYz84Qhu901MPab",
header: false,
createdAt: "2015-04-08T19:46:24"
}
然后你可以有这样的模板:
{{#each row}}
{{#each items}}