我正在使用knockout映射库将来自.NET服务的JSON数据绑定到KO视图模型中的属性,其中该属性具有我需要在屏幕上循环并呈现的对象数组。
.NET模型:
new{
count = count,
total = total,
rows = items,
}
rows属性包含对象列表,需要使用KO将其呈现到表中。
我累了用
<!-- ko foreach: masterData().rows-->
<tr>
<td><span data-bind='text: Id' /></td>
<td><span data-bind='text: Name' /></td>
<td><span data-bind='text: Description' /></td>
<td><span data-bind='text: Status' /></td>
</tr>
<!-- /ko -->
其中masterData是一个可观察的。加载数据后,它在表中没有任何内容。作为一种解决方法,我已将observable的模型更改为observableArray([])
new List<dynamic> {
new
{
count = recCount,
total = total,
rows = items,
}};
并将渲染逻辑更改为
<!-- ko foreach: masterData -->
<!-- ko foreach: rows-->
<tr>
<td><span data-bind='text: Id' /></td>
<td><span data-bind='text: Name' /></td>
<td><span data-bind='text: Description' /></td>
<td><span data-bind='text: Status' /></td>
</tr>
<!-- /ko -->
<!-- /ko -->
现在它按预期工作。应该有一个更好的方法来解决这个问题,或者我想错过一些东西。此外,我需要遍历此列表以访问其他属性。
编辑1:
答案 0 :(得分:2)
我稍微调整了你的代码,使其成为理想选择。我看到没有为获取masterData
数据而循环rows
。
我们现在可以使用with
绑定,这对于上述情况非常适合。
查看:强>
<table>
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Description</th>
<th>Status</th>
</tr>
</thead>
<tbody data-bind="with:masterData2">
<!-- ko foreach:rows -->
<tr>
<td><span data-bind='text: Id' /></td>
<td><span data-bind='text: Name' /></td>
<td><span data-bind='text: Description' /></td>
<td><span data-bind='text: Status' /></td>
</tr>
<!-- /ko -->
</tbody>
</table>
<强>视图模型:强>
var VM = {
masterData: ko.observable([]), //initializing
masterData2: ko.observable([])
}
示例工作小提琴 here
如果您想以延迟加载方式检查 here