[英]Meteor: Iterating over an Object inside of a Collection
我已經遇到過幾次這個問題,而且它讓我發瘋了。 簡短的問題:給定一個包含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.
然后,我嘗試變得聰明(很少是個好主意),並將一堆Objects推入數組,然后將其返回到模板:
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
over它,但是它只打印出object Object
三次。 如預期的那樣。 但是我在這里,涵蓋了所有基礎。
在Meteor github上有一個關於此的公開問題(關於無法與#each
一起使用@key
),但是我真的希望有人能夠提供一個簡單的解決方案。
這個問題有點接近我在做什么,但根本不一樣。
我還嘗試了#with
,結果基本相同。
基本上,我正在尋找一種優雅的“流星”方式(如果有的話)。 顯然我不是專家。 那怎么辦
編輯以回答評論:為了澄清,在模板中,理想的解決方案(不起作用)將在我的html中使用類似的方法,並遍歷集合數據中分數中的每個key:value對:
<div> {{#each scores}} {{this.key}} {{this.value}} {{/each}} </div>
並遍歷集合數據中分數中的每個key:value對。
你可以嘗試一下:
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.