KnockoutJS:无法让foreach上班

时间:2013-06-11 20:58:37

标签: javascript knockout.js

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

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

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