3

我有一个对象,我试图用 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

我在这里做错了什么?

4

1 回答 1

4

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

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

于 2013-06-11T22:52:17.817 回答