我有以下计算的observable女巫基本上将modelViewModels
observableArray分成另一个数组来代表行(虽然逻辑不是问题)
这是在构造函数
中定义的self.selectModelRows = ko.computed(function () {
alert("computing");
var result = [],
row,
colLength = parseInt(self.selectModelRowCount(), 10);
for (var i = 0, j = self.modelViewModels.length; i < j; i++) {
if (i % colLength === 0) {
if (row) {
result.push(row);
}
row = [];
}
row.push(self.modelViewModels()[i]);
}
if (row) {
result.push(row);
}
return result
});
我把警报放在那里进行调试。 警报在构造函数运行时第一次发生 但是我有以下函数来更新计算
中使用的modelViewModels
self.getModels = function () {
alert("getting");
var self = this;
self.modelViewModels([]);
$.when(self.dataContext.getAvailableModels(self.selectedSeriesOption()))
.done(function (data) {
ko.utils.arrayForEach(data.Models, function (item) {
var modelViewModel = new ModelViewModel();
modelViewModel.Model = item.ModelNumber;
//more logic will be added
self.modelViewModels.push(modelViewModel);
});
})
.fail(function (message) {
alert("failed");
});
}
当调用该函数时,我看到"getting"
警报,但未再次调用计算函数,"computing"
警报从未发生,并且控制台中没有错误。
不确定在调用getModels
函数后我还需要做些什么才能使计算更新。
答案 0 :(得分:2)
在计算函数内部,for
循环不会被调用,因为你的数组长度错误。
self.modelViewModels.length
将始终评估为0
。因此,for
内的任何内容都不会执行,因此您不会读取任何observable
对象,从而导致 无依赖 要求那个计算的函数。
将您的代码更改为self.modelViewModels().length
。只需添加()