更新:我似乎忘记了最重要的信息。这不是在html文件中,而是在xsl文件中。 ko注释标签被剥离,这就是“名称”不存在的原因。我将Damien的回答标记为答案,让他因为前往JSFiddle而引导我走向正确的方向。感谢。
原始问题:
有没有办法用knockout.js绑定表中JSON对象的内部数组?我尝试了很多不同的方法,但似乎都没有。有两个类似的问题:
Binding Nested Array Using Knockout foreach
但是,在这两种情况下,他们都在使用容器绑定。我需要使用无容器绑定,这似乎不起作用。
这是一个简化的代码示例:
var reportData = {[ "Category": "First Category", "Id": 1, "Items": [ {"Name": "First Name"}, {"Name": "Second Name"} ] }, { "Category": "Second Category", "Id": 2, "Items": [ {"Name": "First Name"}, {"Name": "Second Name"} ] }];
绑定代码是基本的(摘录):
var viewModel = function() { var self = this; self.reportData = ko.observableArray(); } var vm = new viewModel(); vm.reportData(data); ko.applyBindings(vm);
我需要的是:
<tbody data-bind="foreach: reportData"> <tr> <td data-bind="text: Category"></td> </tr> <!-- ko foreach: Items --> <tr> <td data-bind="text: Name"></td> </tr> <!-- /ko --> </tbody>
我尝试了很多不同的方法来获取内部数组数据,但我总是得到“Name”未定义的错误。我在控制台中确认我正在获取正确的数据,并且外部对象数组值显示没有问题。
访问此内部数组的正确方法是什么,并在内部数组的无容器绑定表中显示?
答案 0 :(得分:2)
请你看看this fiddle并告诉我什么不起作用。 因为对我来说它运作良好。
查看:
<table>
<tbody data-bind="foreach: reportData">
<tr>
<td data-bind="text: Category"></td>
</tr>
<!-- ko foreach: Items -->
<tr>
<td data-bind="text: Name"></td>
</tr>
<!-- /ko -->
</tbody>
</table>
JS:
data = [{
"Category": "First Category",
"Id": 1,
"Items": [{
"Name": "First Name"
}, {
"Name": "Second Name"
}]
}, {
"Category": "Second Category",
"Id": 2,
"Items": [{
"Name": "First Name"
}, {
"Name": "Second Name"
}]
}]
;
var viewModel = function () {
var self = this;
self.reportData = ko.observableArray();
}
var vm = new viewModel();
vm.reportData(data);
ko.applyBindings(vm);