如何迭代Meteor Spacebars模板中的未知对象?

时间:2015-04-08 13:06:07

标签: meteor meteor-blaze spacebars

所以我有一个流星收藏。该集合中的每个对象/文档都可以具有未知结构。也就是说,在运行之前,我不知道每个属性的名称,也不知道有多少属性。

基本上,集合中的每个对象都是由人们通过我的前端页面提供的任意数据创建的(通过CSV上传,工作正常)。因此,当流星开始时,我不会初始化该集合。


现在我想在我的HTML页面中创建一个表格来呈现集合,但没有我预先定义需要多少列以及它们的名称。

那么如何动态设置我的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文档中找到任何引用,但所有示例总是要求我从一开始就知道列的名称。

有什么想法吗?

编辑: 这是一个示例对象,我通过header属性明确标识为标题:

enter image description here

......和&#34;行&#34;看起来像这样:

enter image description here

所以我显然撒了谎,因为我的属性/列名都是索引号。

回答另一个问题: 一旦确定了数据集(填充了集合),所有对象都具有相同数量的属性(即想象一个csv表,这是我的数据总是来自的地方)。

2 个答案:

答案 0 :(得分:1)

由于您的属性除了索引之外没有任何值,因此它对于对象来说并不是一个很好的用例。如果你坚持使用架构(或做深层嵌套更新,虽然我不确定你怎么做......),请遵循Christian的建议。否则,我会让前端为你提供数组或在后期处理中将对象转换为数组。

data = [['uno', 'dos', 'tres'], ['wexfd', 'foobar', 'etc.']]

然后,您可以嵌套each助手并使用this访问基元。超级干净&amp;容易。

答案 1 :(得分:1)

从mongodb数据建模pov中,通过将变量字段粘贴到数组中,可以很容易地改进这种设计。即。

{ items:
  [
    "wexfr",
    "123x",
    "ewfxc",
    "rgc"
  ],
  _id: "NYz84Qhu901MPab",
  header: false,
  createdAt: "2015-04-08T19:46:24"
}

然后您可以拥有以下模板:

{{#each row}}
  {{#each items}}