如何在 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}}