2014-07-21 2 views
2

나는이 JSON 데이터에서 모든 사용자 이름을 표시하기 위해 노력하고있어 :녹아웃 매핑 플러그인을 사용하여 익명 객체를 바인딩하는 방법은 무엇입니까?

내 HTML은 다음과 같습니다
[{ 
     "full_name": "root", 
     "group": 0, 
     "home": "/root", 
     "username": "root", 
     "id": 1 
    }, { 
     "full_name": "Owner of many system processes", 
     "group": 1, 
     "home": "/root", 
     "username": "daemon", 
     "id": 2 
    }, { 
     "full_name": "System", 
     "group": 5, 
     "home": "/", 
     "username": "operator", 
     "id": 3 
    }] 

:

ReferenceError: users is not defined 
with($context){with($data||{}){return{'foreach':function(){return users }}}} 

I :

콘솔
<body> 
     <h2>Knockout list</h2> 
     <ul data-bind="foreach: users"> 
      <li data-bind="text: username"></li> 
     </ul> 

     <script type="text/javascript"> 
      function getUsers() 
      { 
       return $.ajax 
         ({ 
          type: "GET", 
          url: "http://XXX.XXX/api/userinfo", 
          username: "root", 
          password: "meh", 
          cache: false, 
          dataType: "json" 
         }); 
      } 

      getUsers().done(function(results) 
      { 
       var users = "{users: " + results + "}"; 
       var viewModel = ko.mapping.fromJS(users); 
       ko.applyBindings(viewModel); 
      }); 

     </script> 
</body> 

나는이 오류 json에 아무 것도 추가하는 것이 좋은 생각이라고 생각하지 마십시오. 나는 var users = "{users: " + results + "}";을 사용하려고 노력하고 있습니다 만, 그것은 다른 어떤 것보다 필사적 인 단계입니다. 가능하다면 그것을 피하고 싶습니다.

이 작업을 수행하는 방법을 알고 있습니까? 고맙습니다.

답변

2

HTML을 사용하면 viewmodel에 사용자라는 속성이 있어야합니다. foreach 루프에서 iterating하는 것입니다. 확신 할 수는 없지만 결과에서 새 객체를 만드는 선이 올바르게 보이지 않습니다.

var viewModel = {}; 
viewModel.users = ko.mapping.fromJS(data); 
ko.applyBindings(viewModel); 

jsfiddle를 생성하고,이 작동합니다 : 당신은 당신의 ViewModel에 명시적인 사용자 속성을 만들고 여기에 매핑 된 결과를 할당 시도 할 수 있습니다.

+0

고맙습니다. –