不能让每个人都去工作

KnockoutJS: Can't get foreach to work

本文关键字:工作 每个人 不能      更新时间:2023-09-26

我有一个对象,我试图通过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是得到JSON数据从php脚本和它的结构像这样:"09"、"10"answers"36"为分区id。每个分区都有一个'partition'变量,它显示分区的名称。实际的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

我在这里做错了什么?

你不能foreach一个对象。只能对阵列进行foreach操作。你发布的JSON是一个有一堆编号属性的对象,这就是为什么$root[36]工作,因为36是对象上的属性名称,而不是数组的索引。

如果你的对象是一个数组,你的代码将工作