【问题标题】:KnockoutJS: Can't get foreach to workKnockoutJS:无法让 foreach 工作
【发布时间】:2013-06-12 06:52:17
【问题描述】:

我有一个对象,我试图用 foreach 循环,但我失败了(这就是 6 个月不编码对我的影响......)

这很好用:

<div data-bind="text: $root[36].partition"></div>

但是 foreach 不适合我。

 <div data-bind="foreach: $root">
  <div data-bind="text: $data.partition"></div>
 </div>

我在我的 html 中得到的只是:

<div data-bind="foreach: $root"></div>

我的 viewModel 正在从 php 脚本获取 JSON 数据,其结构如下: 09、10 和 36 是分区 ID。每个分区都有一个“分区”变量,它显示分区的名称。实际的 JSON 结构更深入,这里只是为了表示

top level
    09
      partition
      vip
    10
      partition
      vip
    36
      partition
      vip

这是我的 JS。没什么特别的,我只是在玩玩

$(document).ready(function() {

    var viewModel = {};
    $.getJSON('/lbstat/read.php', function(data) {
        viewModel = ko.mapping.fromJS(data);
    ko.applyBindings(viewModel);
    });

});

JSON:

{"23":{
     "partition":"Prod New SVCs Partition",
     "env_dc":"Prod",
     "hosts":["server01.domain.com", "server02.domain.com"],
     "vips":{
           "124":{
               "dc_endpoint":"ADX - Prod - Intranet",
               "gw_port":"9007",
               "vip_name":"adx-prd.domain.net"
                },
           "210":{
               "dc_endpoint":"Msg - Prod - Internet",
               "gw_port":"8013",
               "vip_name":"messaging-prd.domain.com"
                 },
           "211":{
               "dc_endpoint":"Msg - Prod - Intranet",
               "gw_port":"9013",
               "vip_name":"messaging-prd.domain.net"}
              },
          }
    }

此处提供完整的 JSON:http://pastebin.com/zpNngr53

我在这里做错了什么?

【问题讨论】:

  • 您的问题并不完全清楚,代码不完整。如果我尝试完成它,对我来说一切都很好,例如见this fiddle
  • 加载你的 JSON 的代码是什么样的,你的代码是什么ko.applyBindings
  • 在原问题中添加了 JS 和 JSON
  • 您确定JSON中的外部[]吗?这与您最初的声明不符,即 $root[36].partition 有效。
  • 恐怕你的样本理解起来还是有点粗糙。 “23”是什么意思,它代表什么? “vips”位看起来像是要创建一个数组,但它是一个对象 ({...}),具有属性“124”、“210”、“211”。此外,您认为foreach 表明您有一个数组,但您的数据中唯一的数组是"hosts"?

标签: javascript knockout.js


【解决方案1】:

你不能foreach 一个对象。你只能foreach一个数组。您发布的 JSON 是具有一堆编号属性的对象,这就是 $root[36] 起作用的原因,因为 36 是对象上的属性名称,而不是数组的索引。

如果你的对象是一个数组,你的代码就可以工作。

【讨论】:

猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
相关资源
最近更新 更多