2013-06-11 4 views
3

난 내가 foreach 문으로 통해 루프를 시도하고 객체를 가지고,하지만 난KnockoutJS는 : 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에서 얻을 모든

이 있습니다 : PHP 스크립트에서

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

내 ViewModel을가지고 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 : 여기에 사용할 수 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"} 
       }, 
      } 
    } 

: http://pastebin.com/zpNngr53

내가 잘못 여기서 뭐하는 거지?

+2

질문에 명확하지 않은데 코드가 완전하지 않습니다. 내가 그것을 완료하려고하면, 나를 위해 잘 작동합니다. [이 바이올린] (http://jsfiddle.net/jeroenheijmans/TVRHc/)을 참조하십시오. – Jeroen

+0

JSON을로드하는 코드와'ko.applyBindings'를 작성하는 코드는 무엇이 있습니까? –

+0

원본 질문에 JS와 JSON을 추가했습니다. – solefald

답변

4

foreach 개체를 사용할 수 없습니다. 배열은 foreach뿐입니다. 사용자가 게시 한 JSON은 번호가 매겨진 속성이 많은 객체이므로 36은 객체의 속성 이름이 아니고 배열 색인이 아니기 때문에 $root[36]이 작동하는 이유입니다.

개체가 배열 인 경우 코드가 작동합니다.

+1

개체를 foreach하기를 원하는 다른 사람을 위해 http://stackoverflow.com/questions/14838135/how-to-use-knockout-to-iterate-over-an-object-not-array를 참조하십시오. 거기에 도움이 될만한 것들이있을 수 있습니다. – Jacob