我对这个概念有点麻烦,我想知道你们之前是否有人这样做过。
我对我目前的状况有所了解:
您是否认为有办法将createRows函数转换为返回ko.computed的工厂,而不是让我的self.itemRows必须声明自己是计算的。
理想情况下,我的代码看起来像:
self.itemRows = createRows(self.items(), 4);
Lemme知道你的想法,谢谢你!
答案 0 :(得分:2)
当然,您可以使用函数返回计算的observable。但是,为了使计算机正确更新,所有可观察的依赖关系需要在计算函数内“展开”。这将要求您更改函数以接受可观察数组而不是数组。
function createRows(itemsObservable, itemsPerRow) {
return ko.computed(function () {
var items = itemsObservable() ....
});
}
答案 1 :(得分:1)
当然,但您必须pass in the observable itself instead。
function createRows(itemsObservable, itemsPerRow) {
return ko.computed(function () {
return (function(items, itemsPerRow) {
var result = [];
for (var i = 0; i < items.length; i += itemsPerRow) {
var row = [];
for (var j = 0; j < itemsPerRow; ++j) {
if (items[i + j]) {
row.push(items[i + j]);
}
}
result.push(row);
}
return result;
})(itemsObservable(), itemsPerRow)
})
}
self.itemRows = createRows(self.items, 2);