循环通过可观察的淘汰属性数组

时间:2015-10-17 17:02:37

标签: javascript knockout.js

我正在使用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:

http://jsfiddle.net/krishnasarma/hdt9ehth/

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