【问题标题】:Meteor: Iterating over an Object inside of a CollectionMeteor:迭代集合内的对象
【发布时间】:2015-12-25 12:23:07
【问题描述】:

我遇到过几次这个问题,它慢慢让我发疯。简短的问题:当给定一个包含 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#each 一起使用),但我真的希望有人有一个简单的解决方案。

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

我也试过#with,结果基本一样。

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

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

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

并遍历集合数据中分数内的每个键:值对。

【问题讨论】:

  • 相当肯定流星可以使用.点运算符来获取对象内的子对象。所以从一个实例到一个对象的根,你可以做{{myObj.childObj}}
  • 我很抱歉..到目前为止,您的方法是正确的..您可以简化您正在尝试做的事情吗?我的意思是一些代码和你想要实现的目标......一个例子可以满足你的预期输出
  • 我在底部留下了一个编辑,更清楚地说明了我期望的输出。希望这有帮助吗? @mariocatch,该对象实际上并未在模板中显示为对象,而是显示为字符串。我不认为在这种情况下它实际上会起作用,因为团队的数量是不变的,而且键实际上是团队名称(如“bobTeam”或“silverBullet”),所以我不能按名称调用键在模板中。

标签: javascript mongodb meteor


【解决方案1】:

你能试试这个吗:

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>

【讨论】:

  • 嗯,这 - 看起来 - 与我上面所做的完全相同,但您的解决方案似乎确实有效。我要花点时间弄清楚为什么这行得通,而我所做的却行不通……
  • 我刚刚创建了一个对象数组[{key:team1, value: 3}, {key:team2, value: 1}, {key:losses, value: 7}],并通过'key'和'value'键从模板访问它
  • 哦,我明白了!我返回的数组看起来像[{team1: 3}, {team2: 1}, {losses: 7}],这意味着我不能像你正在做的那样通过名称“key”和“value”访问 key:values。毕竟,这确实有道理。谢谢!
  • mizzaothe Meteor githubthe Meteor github 上给出了像我一样的代码,但在咖啡脚本上
猜你喜欢
  • 1970-01-01
  • 2015-08-23
  • 2022-07-05
  • 2020-03-29
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2017-04-13
  • 1970-01-01
相关资源
最近更新 更多