knockout.js 如何使用嵌套词典Map数据?

y1aodyip  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(140)

我使用KO JS,在显示根键的键时遇到了问题。我问了一个关于它的问题,确实有了一些进展,但问题仍然没有解决。LINK TO PREVIOUS QUESTION
我认为我的数据需要Map。我从后端获得的数据如下所示:

以下是示例数据的文本版本

"Pricings": {
        "2021-22": {
            "Tbilisi": {
                "PriceHeaders": [

                ],
                "Comment": "TBi",
                "Pricings": [
                    {

                    }
                ]
        },
        "2020-21": {
            "Tbilisi": {
                "PriceHeaders": [

                ],
                "Comment": "TBi",
                "Pricings": [
                    {

                    }
                ]
            }
        }
}

我在考虑重新创建如下数据:发件人:

2020-21 :
{
    Tbilisi: {PriceHeaders: Array(9), Comment: 'TBi', Pricings: Array(1)}
}

收件人:

Year : 2020-21 
Cities : {
    Tbilisi: {PriceHeaders: Array(9), Comment: 'TBi', Pricings: Array(1)}
}

然后,我可以运行一个简单的foreach,并从Cities中获取Year和Any键的值。
我想出了这样的点子

Object.entries(data).map(([year, cities]) =>
(
    {
     "year": year,
     "cities": Object.entries(cities).map(([name, cities]) =>
      (
          {
              name,
              ...cities
          }
      ))
     }
 ))

问题是,我不能在数据绑定中使用此代码

<div data-bind="data : THIS FUNCTION HERE , as 'result'"></div>
vcirk6k6

vcirk6k61#

此问题已通过this answer解决
密钥代码为:

.reduce(
        // You can also use: `for ... in`, `Object.keys`, etc.
        //  search for "Iterate over js object" to learn more
        (data, coupon) => data.concat(Object.entries(coupon)),
        []
      )
      // Here we construct a simple viewmodel to make our data-binds easier
      .map(([k, v]) => ({ key: k, value: v }))

这将为您的数据做的是 Package 您已经在 Package 器对象中的数据,因此与您的示例数据一起,它将组成...

{
    key: "2020-21",
    value: {
        Tbilisi: {
            PriceHeaders: Array(9), Comment: 'TBi', Pricings: Array(1)
        }
    }
}

...从原始结构

2020-21 :
{
    Tbilisi: {PriceHeaders: Array(9), Comment: 'TBi', Pricings: Array(1)}
}

这意味着,当迭代kojs模板中的pureComputed函数时,可以使用[binding]: key访问year,使用[binding: value访问嵌套数据
您可能还希望在knockout中查看对象值的'mapping' plugin,以使其在数据更改时更新(除非它始终是静态的)

相关问题