Knockout.js 如何在Knockout JS中完全从viewmodel中删除子对象?

Knockout.js 如何在Knockout JS中完全从viewmodel中删除子对象?,knockout.js,Knockout.js,我有以下设置: 我有一个KOJS视图模型,它有一个父和子关系。让这种关系有点奇怪的是,孩子需要父母来执行它的一个计算函数 这给我带来了各种各样的问题,因为当我调用save时,我必须重新加载我的所有子级,每当父级的可观察对象发生变化时,旧的子级仍然会触发它们的计算函数 这不是我想要的行为。我想做的是,在保存之前完全删除所有子项,然后从服务器回调中重新添加子项。我的意思是,年迈的孩子们将完全从记忆中消失,他们将不再点燃他们的任何事件。然而,我不知道如何用KOJS正确地清理它们。在这一点上,我只知道如

我有以下设置:

我有一个KOJS视图模型,它有一个父和子关系。让这种关系有点奇怪的是,孩子需要父母来执行它的一个计算函数

这给我带来了各种各样的问题,因为当我调用save时,我必须重新加载我的所有子级,每当父级的可观察对象发生变化时,旧的子级仍然会触发它们的计算函数

这不是我想要的行为。我想做的是,在保存之前完全删除所有子项,然后从服务器回调中重新添加子项。我的意思是,年迈的孩子们将完全从记忆中消失,他们将不再点燃他们的任何事件。然而,我不知道如何用KOJS正确地清理它们。在这一点上,我只知道如何正确地将它们从父对象的子对象列表中删除


在KOJS视图模型中完全处理子对象的正确方法是什么?

您可以使用ko函数:ko.removeNodenode,它调用ko.cleannode,然后从父节点删除子对象。

作为一种解决方法,我不得不求助于这样做,尽管我真的不希望这样做:

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);​

请注意如何使用活动标志有条件地离开计算函数。对我来说,这只是一个解决我面临的根本问题的方法。

不幸的是,这对我不起作用。我认为应该删除self.children[I].parent=null;行: