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です。各パーティションには、パーティションの名前を表示する「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

ここで何が間違っていますか?

4

1 に答える 1

4

foreachオブジェクトはできません。できるforeachのは配列のみです。あなたが投稿したJSONは、配列のインデックスではなく、オブジェクトのプロパティの名前である$root[36]ため、一連の番号付きプロパティを持つオブジェクトです。36

オブジェクトが配列の場合、コードは機能します。

于 2013-06-11T22:52:17.817 に答える