Meteor:迭代集合中的对象

时间:2015-12-25 03:40:49

标签: javascript mongodb meteor

我已经遇到过这个问题几次,而且它正在慢慢让我疯狂。简短问题:当给出一个包含Object作为字段的集合时,我们如何在模板中迭代该对象。

集合中的每个条目都如下所示:

{
    "_id" : "jsWmXTvocbSMM5JAF",
    "userId" : "gcko4Eo3YtZaWa8aj",
    "gameId" : "eduzNj8kWv7TdiEuE",
    "scores" : {
        "team1" : 3,
        "team2" : 1,
        "losses" : 7
    }
}

我们可以轻松访问模板中的{{userId}}{{gameId}},但当然{{scores}}只显示了我们期望的[object Object]。

我尝试使用{{#each scores}},我之前使用过数组,但当然会抛出错误:

{{#each}} currently only accepts arrays, cursors or falsey values.

然后我试着变得聪明(很少是一个好主意)并将一堆对象推入一个数组,然后将其返回给模板:

Template.scorePad.helpers({
    scoresArray: function () {
        var arr = [], scores = this.scores;
        for (var key in scores) {
            var obj = {};
            obj[key] = scores[key];
            arr.push(obj);
        }
        return arr;
    }
}

我不确定为什么我认为这是一个好主意,因为这只是为模板提供了一个如下所示的数组:

[{team1: 3}, {team2: 1}, {losses: 7}]

哪个,是的,太棒了..我可以#each覆盖它,但它只打印object Object三次。正如所料。但我在这里,涵盖了所有的基础。

关于这一点(关于无法在Meteor github使用@key),有一个未解决的问题,但我真的希望有人有一个简单的解决方案。< / p>

This问题与我正在做的事情有点接近,但完全不同。

我也试过了#each,结果基本相同。

基本上,如果有的话,我正在寻找一种优雅的“流星”方式。显然我不是专家。怎么办?

编辑回答评论:为了澄清,在模板中理想的解决方案(不起作用)将在我的html中使用类似的东西,并迭代每个键:值对收集数据中的内部分数:

#with

并迭代每个键:集合数据中得分内的值对。

1 个答案:

答案 0 :(得分:0)

你可以试试这个:

Template.scorePad.helpers({
scoresArray: function () {
    var arr = [], scores = this.scores;
    for (var key in scores) {
        var obj = {};
        obj.key = key;
        obj.value = scores[key];
        arr.push(obj);
    }
    return arr;
  }
}

然后像这样迭代:

<div>
{{#each scores}}
    {{this.key}}
    {{this.value}}
{{/each}}
</div>