无法使用KnockoutJS引用嵌套的JSON对象

时间:2014-07-05 11:52:21

标签: json twitter-bootstrap knockout.js

我有一个JSON字符串,它有一个名为data的嵌套JSON对象。我试图引用嵌套JSON对象的status部分,但是当我在HTML中引用它时,KnockoutJS不会在我的表中填充与Status有关的单元格。但是,KnockoutJS会填充表格的发件人部分。

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>

注意:我也使用Bootstrap作为CSS。

我已经检查了Firefox Web开发人员控制台,并且没有与我的脚本有关的错误。

1 个答案:

答案 0 :(得分:1)

映射插件将您的属性转换为可观察对象。

这意味着我们的data.status属性将是ko.observable,这是一个函数,您需要调用它而不需要任何参数来获取其值。

所以你需要修复你的css绑定并在那里写data.status()

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