【发布时间】: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