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

如何在Meteor Spacebars模板中迭代未知对象?,meteor,meteor-blaze,spacebars,Meteor,Meteor Blaze,Spacebars,所以我有一个流星收藏。该集合中的每个对象/文档都可能具有未知结构。也就是说,直到运行时,我才知道每个属性的名称,也不知道有多少属性 基本上,集合中的每个对象都是从人们通过我的前端页面(通过CSV上传,效果很好)提供的任意数据创建的。所以我不会在Meteor启动时初始化集合 现在,我想在HTML页面中创建一个表,用于呈现集合,但不需要预先定义需要多少列以及它们的名称 那么,如何动态设置Spacebars/HTML模板中列的数量和名称呢 下面是我在模板方面的进展: <table>

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

基本上,集合中的每个对象都是从人们通过我的前端页面(通过CSV上传,效果很好)提供的任意数据创建的。所以我不会在Meteor启动时初始化集合


现在,我想在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>

{{{#if头}}
{{{#每个什么?}
{{???}}
{{/每个}}
{{else}
{{{#每个什么?}
{{???}}
{{/每个}}
{{/if}
我试图在Spacebars和Blaze文档中找到任何引用,但所有示例都要求我从一开始就知道列的名称

有什么想法吗

编辑: 下面是一个示例对象,我通过header属性将其明确标识为header:

…和“行”如下所示:

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

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

由于您的属性除了索引之外没有任何值,因此对于对象来说,这并不是一个很好的用例。如果您必须坚持使用模式(或者进行深度嵌套的更新,尽管我不确定如何实现…),请遵循Christian的建议。否则,我会让前端为您提供数组,或者在后期处理中将对象转换为数组

data=['uno'、'dos'、'tres']、['wexfd'、'foobar'、'etc.][/code>


然后,您可以嵌套
每个
帮助程序,并使用
this
访问原语。超级干净和简单。

从mongo db数据建模的角度来看,通过将变量字段粘贴到数组中,可以轻松改进此设计。i、 e

{ items:
  [
    "wexfr",
    "123x",
    "ewfxc",
    "rgc"
  ],
  _id: "NYz84Qhu901MPab",
  header: false,
  createdAt: "2015-04-08T19:46:24"
}
然后,您可以使用以下模板:

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

您的说法是正确的,您必须知道要在数据上下文中使用每个数据结构。当然,您可以事先解析到结构化数组,或者在每个循环中使用一个帮助器(
{{{{each doEach(WHAT)}}
),帮助器将返回您的结构化数组。收集数据是否具有不同的字段而不是平面结构?你能给我们看一个示例文档吗?我已经添加了数据示例来说明。它必须是反应性的吗?它应该是反应性的,是的。数据将在稍后处理,我希望表格能够反映这一点。不过,首先,我很乐意采用非反应性解决方案我可以看出我不会以某种方式使用数组。谢谢你的建议!似乎是一个相对简单的妥协。我应该能够从我的列创建数组,并将它们粘贴到我的文档中。