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

标签 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 -->

最佳答案

ko.computed 不会自动遍历所有项目。你需要自己做:

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

演示 JSFiddle .

ko.computed 只为您提供在其依赖的可观察变量之一发生变化时重新计算其值的功能。

关于javascript - 为数组中的每个项目计算的 jQuery Knockout 运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21109300/

相关文章:

javascript - 如何在 chrome 中使用 jquery.load() 在 html 中嵌入文件

data-binding - 使用数据绑定(bind)到图像 src 属性的 knockout 模板不起作用

javascript - Durandal/Knockout - 在绑定(bind)之前从服务器数据创建 viewModel

javascript - 20 秒后重播 .swf

php - 如何每隔一分钟将当前值加2?

javascript - 在调用 FB.init() 之前调用 FB.getLoginStatus()

javascript - Jquery Ajax Json 对象

javascript - 如何使用 Knockout.js 在特定位置向 ObservableArray 添加/插入项目

javascript - 如何使用 Stripe 在一个操作中同时创建客户和卡片?

javascript - 我如何根据屏幕分辨率在我的文本两侧自动附加 div