我有一个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开发人员控制台,并且没有与我的脚本有关的错误。
答案 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>