jQuery Knockout运行为数组中的每个项目计算

时间:2014-01-14 08:53:36

标签: javascript jquery knockout.js

我有一个ko.computed函数,用于确定ko.observableArray()中的当前项是否有效。

但是,不会对数组中的每个项执行计算函数

jsfiddle

JavaScript的:

var viewModel = {
    items: ko.observableArray(["value 1", "value 2", "value 3"]),
};
viewModel.isValid = ko.computed(function() {
    // doesn't gets executed for each item
    console.log(this);

    return true;
}, viewModel);
ko.applyBindings(viewModel);

HTML:

<script type="text/html" id="item-template">
    <span data-bind="css: { 'valid': $root.isValid }, text: $data"></span>
</script>

<!-- ko template: { foreach: items, name: 'item-template' } --><!-- /ko -->

1 个答案:

答案 0 :(得分:3)

ko.computed不会自动浏览您的所有商品。你需要自己做这件事:

viewModel.isValid = ko.computed(function() {
    ko.utils.arrayForEach(this.items(), function(item) {
        console.log(item);
    });
    return true;
}, viewModel);

演示JSFiddle

ko.computed仅为您提供重新计算其值的功能,如果其中一个依赖的可观察更改。