Knockout:基于未知长度的数组动态创建observable

时间:2014-08-04 13:32:58

标签: javascript knockout.js

以下是这种情况:

我有一个动态填充的项目列表。该列表中的项目数是未知的,可以从零到数百个项目不等。

加载页面时,应加载此列表,对于每个项目,应生成一个复选框(带标签)。没问题。这样的列表项将如下所示:

<div class="checkbox">
    <label>
        <input type="checkbox" />
        Item 1
    </label>
</div>

这是棘手的部分:

对于这些项目中的每一项,都应创建ko.observable(),以便我可以跟踪复选框的checked绑定。

一个理想的情况是这样的(我知道这不会起作用,只是为了说明我的目标):

for (var i = 0; i < list.length; i++) {
    var listItem$ = ko.observable(); // $ = i
}

所以稍后,我可以按照以下方式做点什么:

if (listItem4()) {
    //listItem is checked (=true), do some actions
}

我希望这是有道理的。

1 个答案:

答案 0 :(得分:0)

您不需要迭代每个属性以使其可观察,更好的方法是使用knockout.mapping.js插件。 所以代码就像: -

self.itemList = ko.mapping.fromJS(list); //list that will come from server(ajax request)

然后只需使用选中的绑定来跟踪选中的复选框。

Fiddle Demo