![](/img/trans.png)
[英]Blaze template helper only returning on in a Spacebars each loop in Meteor/Mongo
[英]Blaze template, loop through fields?
我一直無法找到任何可用於循環遍歷名為“week01”、“week02”、“week03”的字段的快捷方式的引用,我可以在其中引用包含相同結構中的子字段的 object 字段。
我知道每個文檔的 #each 但不知道如何 go 關於每個字段。 我有 30 周的字段,想遍歷這些字段,然后也引用 object 屬性。
任何人都可以給我提示或可能對我有幫助的在線資源嗎? 我是一名 VB/php 開發人員,正在開發我的第一個 Meteor 應用程序,並且是第一次使用 Mongo。 希望我錯過了一些可能的東西。
"personId": "rY7XaJJkrdAWaByQK",
"week01": {
"date": {
"$date": "2021-04-07T12:00:00.000Z"
},
"field1": "chunks as necessary",
"field2": "readable English",
"field3": "Contrary to popular belief"
},
"week02": {
"date": {
"$date": "2021-04-14T12:00:00.000Z"
},
"field1": "consectetur, from",
"field2": "more recently with desktop",
"field3": "Contrary to popular belief"
},
"week03": {
"date": {
"$date": "2021-04-21T12:00:00.000Z"
},
"field1": "going through",
"field2": "readable English",
"field3": "Contrary to popular belief"
},
"week04": {
"date": {
"$date": "2021-04-28T12:00:00.000Z"
},
"field1": "words which don't look",
"field2": "sure there isn't",
"field3": "Contrary to popular belief"
},
"week05": {
"date": {
"$date": "2021-05-05T12:00:00.000Z"
},
"field1": "only five centuries",
"field2": "Where can I get some",
"field3": "infancy. Various"
}
} ```
#each
只接受 arrays 或游標,所以你需要從你的 Object 中提取一個數組。
在 JavaScript 中,您可以從 Object(這是您的文檔)的字段(屬性)生成一個數組,並過濾它們以僅包含屬性名稱(鍵)中包含week
的那些。 然后你可以通過助手返回它們:
const document = {
"personId": "rY7XaJJkrdAWaByQK",
"week01": {
"date": {
"$date": "2021-04-07T12:00:00.000Z"
},
"field1": "chunks as necessary",
"field2": "readable English",
"field3": "Contrary to popular belief"
},
"week02": {
"date": {
"$date": "2021-04-14T12:00:00.000Z"
},
"field1": "consectetur, from",
"field2": "more recently with desktop",
"field3": "Contrary to popular belief"
},
"week03": {
"date": {
"$date": "2021-04-21T12:00:00.000Z"
},
"field1": "going through",
"field2": "readable English",
"field3": "Contrary to popular belief"
},
"week04": {
"date": {
"$date": "2021-04-28T12:00:00.000Z"
},
"field1": "words which don't look",
"field2": "sure there isn't",
"field3": "Contrary to popular belief"
},
"week05": {
"date": {
"$date": "2021-05-05T12:00:00.000Z"
},
"field1": "only five centuries",
"field2": "Where can I get some",
"field3": "infancy. Various"
}
}
const weeks = Object.entries(document) // will be an array of key/value pairs
.filter(([key, value]) => key.includes('week')) // only use week fields
.map(([key, value]) => value) // only use the value
Template.helpers({
allWeeks () {
return weeks
}
})
然后您可以通過{{#each week in allWeeks}}
對其進行迭代。
注意:這有點低效,因為在每次重繪時它都會運行上面的代碼。 您將引入一個 ReactiveVar 或 ReactiveDict 並在其中保存week
並從該反應源返回值:
const state = new ReactiveDict()
const weeks = Object.entries(document) // will be an array of key/value pairs
.filter(([key, value]) => key.includes('week')) // only use week fields
.map(([key, value]) => value) // only use the value
state.set({ weeks })
Template.helpers({
allWeeks () {
return state.get('weeks')
}
})
讀物:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.