2014-07-05 2 views
-1

data이라는 중첩 JSON 객체가있는 JSON 문자열이 있습니다. 중첩 된 JSON 객체의 status 부분을 참조하려고하지만 HTML에서 참조 할 때 KnockoutJS가 내 테이블의 Status와 관련된 셀을 채우지 않습니다. 그러나 KnockoutJS는 테이블의 보낸 사람 부분을 채 웁니다.KnockoutJS로 중첩 JSON 객체를 참조 할 수 없습니다.

JSON :

[{"statusmsg":"OK","data":{"status":"running"},"sender":"hostname","statuscode":0}]

KnockoutJS (service.js) :

function ServiceViewModel() { 
    var self = this; 
    self.rows = ko.observableArray(); 

    $.ajax({ 
      method: "GET", 
      url: "/mcollective/service/status/servicename", 
      success: function(data) { 
      var observableData = ko.mapping.fromJSON(data); 
      var array = observableData(); 
      self.rows(array); 
      } 
     }); 

}; 

$(document).ready(function() { 
    ko.applyBindings(new ServiceViewModel()); 
}); 

HTML :

<tbody data-bind="foreach: rows"> 
       <tr> 
       <td data-bind="text: sender"></td> 
       <td> 
       <span data-bind="text: data.status, 
            css: { 'label-success': data.status == 'running', 
             'label-danger': data.status == 'stopped', 
             'label': true }"> 
       </span> 
       </td> 
       <td> 
       </tr> 
</tbody> 

참고 : 나는 또한 CSS에 대한 부트 스트랩을 사용하고 있습니다.

Firefox 웹 개발자 콘솔을 점검했는데 스크립트에 관한 오류가 없습니다.

답변

1

매핑 플러그인은 속성을 관찰 가능 항목으로 바꿉니다.

즉, data.status 속성은 값을 얻기 위해 인수없이 호출해야하는 기능인 ko.observable입니다.

<span data-bind="text: data.status, 
       css: { 'label-success': data.status() == 'running', 
         'label-danger': data.status() == 'stopped', 
         'label': true }"></span> 
:

그래서 당신은 당신이 css 바인딩을 수정하고있다 data.status()를 작성해야

관련 문제