我的问题是当我点击KnockoutJS中数据绑定的行时,发送到我的selectItem
函数的数据为空,只在Firefox Web Console中显示{"data":{}}
。
我不明白的是如何获取表格单元格的值以便我可以引用我的JSON对象的sender
部分?目前,它是空的。
KnockoutJS:
function ServiceViewModel() {
var self = this;
self.rows = ko.observableArray();
$.ajax({
method: "GET",
url: "URL",
success: function(data) {
var observableData = ko.mapping.fromJSON(data);
var array = observableData();
self.rows(array);
}
});
self.computedRows = ko.computed(function() {
if(!self.query()) {
return self.rows();
} else {
return ko.utils.arrayFilter(self.rows(), function(row) {
return row.sender() == self.query();
});
}
});
self.selectedItem = ko.observable();
self.selectItem = function(data) {
self.selectedItem(data);
console.log(JSON.stringify(self.selectedItem()));
};
};
$(document).ready(function() {
var svc = new ServiceViewModel();
ko.applyBindings(svc);
});
JSON:
[{"statusmsg":"OK","data":{"status":"running"},"sender":"hostname","statuscode":0}]
HTML:
<div class="table-responsive">
<table class="table table-condensed table-striped table-bordered table-hover">
<thead>
<tr>
<th>Host</th>
<th>Status</th>
<th>Actions</th>
</tr>
</thead>
<tbody data-bind="foreach: computedRows().sort(function(l, r) { return l.sender() > r.sender() ? 1 : -1})">
<tr data-bind="click: $root.selectItem">
<td data-bind="text: sender"></td>
<td><span data-bind="text: data.status"></span></td>
<td>
<div class="btn-group">
<button data-bind="click: $root.selectItem">Start</button>
<button>Stop</button>
</div>
</td>
</tr>
</tbody>
</table>
</div>
答案 0 :(得分:2)
你需要使用ko.toJSON将你的淘汰模型转换为json而不是JSON.stringify,因为knockout使用了observables的函数。
console.log(ko.toJSON(self.selectedItem()));