作为一种解决方法,我不得不求助于这样做,尽管我真的不希望这成为解决方案:
function Parent() {
var self = this;
self.children = ko.observableArray([]);
self.troublemaker = ko.observable(5);
self.blowaway = function () {
//i have to do this so i can serialize later
for (var i = 0; i < self.children().length; i++) {
self.children()[i].alive = false;
self.children()[i].parent = null;
}
var dataToServer = ko.toJSON(self);
//save to server
self.children.removeAll();
makeChildren();
}
function makeChildren(){
self.children.push(new Child(self));
self.children.push(new Child(self));
self.children.push(new Child(self));
}
makeChildren();
}
var count = 0;
function Child(parent) {
var self = this;
self.parent = parent;
self.alive = true;
self.something = ko.observable(10 * count);
count++;
self.iwillblowup = ko.computed(function () {
if (!self.alive)
return;
return self.something () * self.parent.troublemaker();
});
}
var viewModel = new Parent();
ko.applyBindings(viewModel);
请注意“活动”标志是如何用于有条件地离开计算函数的。对我来说,这只是解决我遇到的基本问题的技巧。