我有observableArray
元素(元素不是可观察的,但有些是不可观察的对象)。我还有computed
变量,observableArray
上的变量。如果我将元素推入数组,那么一切正常(我的意思是 - 计算变量重新计算)。
但是,如果我更改observableArray单项的某些属性,则不会重新计算计算结果:
var myObsArr = ko.observableArray();
// myObsArr is loaded using ko.mapping.fromJS with data from server
// but I am using custom mapping that won't create observables for observableArray items, part of my custom mapping (the one that corresponds to observable item) is something like this:
create: function (options) {
// here are some manipulations and
return ko.toJS(options.data); //doesn't create observables for observableArry items
}
var computedArr = ko.computed(function() {
var t = self.myObsArr();
// do manipulations on t and return manipulated array
});
// later I need to change some elements of observable array, for example:
myObsArr[0].Month = "Mar"; //doesn't trigger computed to be recalculated
当可观察数组中的任何对象发生更改时,如何触发计算重新计算?
答案 0 :(得分:2)
修改其中一个元素后,您可以在valueHasMutated
上调用myObsArr
方法。它将触发淘汰依赖关系跟踪,并会通知您computedArr
有关更改的信息:
myObsArr[0].Month = "Mar";
myObsArr.valueHasMutated();
但是,每次更改数组中的项目时都必须记住调用此项,这样您最好将Month
转换为ko.observable
,因为在这种情况下,ko更改跟踪将选择自动更改,它将通知您的计算而无需任何其他代码。