2014-01-14 39 views
1

我有一個ko.computed函數,它可以確定ko.observableArray()中的當前項目是否有效。爲陣列中的每個項目計算jQuery Knockout運行

然而,所計算的功能不被爲每個項目陣列中執行

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

回答

3

ko.computed確實不會自動遍歷所有它EMS。你需要自己做這個:

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

演示JSFiddle

ko.computed只爲您提供重新計算其值的功能,如果其中一個相關的可觀察更改。

相關問題