我已经遇到过这个问题几次,而且它正在慢慢让我疯狂。简短问题:当给出一个包含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
并迭代每个键:集合数据中得分内的值对。
答案 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>