微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Blaze 模板,遍历字段?

如何解决Blaze 模板,遍历字段?

我找不到任何可用于循环遍历名为“week01”、“week02”、“week03”的字段的快捷方式的引用,我可以在其中引用该字段,该字段是包含子字段的对象相同的结构。

我知道每个文档都有 #each,但不知道如何处理每个字段。我有 30 周的字段,想遍历这些字段,然后也引用对象属性

谁能给我一个提示或可能对我有帮助的在线资源?我是一名 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","week03": {
        "date": {
            "$date": "2021-04-21T12:00:00.000Z"
        },"field1": "going through","week04": {
        "date": {
            "$date": "2021-04-28T12:00:00.000Z"
        },"field1": "words which don't look","field2": "sure there isn't","week05": {
        "date": {
            "$date": "2021-05-05T12:00:00.000Z"
        },"field1": "only five centuries","field2": "Where can I get some","field3": "infancy. VarIoUs"
    }
} ```

解决方法

#each 仅接受数组或游标,因此您需要从对象中提取一个数组。

在 JavaScript 中,您可以从对象(即您的文档)的字段(属性)生成一个数组,并过滤​​它们以仅包含在其属性名称(键)中包含 week 的那些。然后你可以通过 helper 返回它们:

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","week03": {
        "date": {
            "$date": "2021-04-21T12:00:00.000Z"
        },"field1": "going through","week04": {
        "date": {
            "$date": "2021-04-28T12:00:00.000Z"
        },"field1": "words which don't look","field2": "sure there isn't","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]) => 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

https://docs.meteor.com/api/reactive-dict.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。