Knockout.js 破坏淘汰模型的正确方法

Knockout.js 破坏淘汰模型的正确方法,knockout.js,knockout-mapping-plugin,Knockout.js,Knockout Mapping Plugin,我有一个全文搜索应用程序。在用户发起的每次新搜索中,从服务器返回的上下文段落和相关描述数据都会使用映射插件映射到viewmodel 但是,在实例化新的视图模型之前,需要销毁从先前搜索中实例化的视图模型,并从DOM中删除由此创建的所有DOM元素 从使用映射插件创建的陈旧ViewModel中销毁或删除项目的正确方法是什么 编辑: 我不明白,从这个角度来看,如何使用这些方法: mappedRemoveAll mappedDestroy map

我有一个全文搜索应用程序。在用户发起的每次新搜索中,从服务器返回的上下文段落和相关描述数据都会使用映射插件映射到viewmodel

但是,在实例化新的视图模型之前,需要销毁从先前搜索中实例化的视图模型,并从DOM中删除由此创建的所有DOM元素

从使用映射插件创建的陈旧ViewModel中销毁或删除项目的正确方法是什么

编辑: 我不明白,从这个角度来看,如何使用这些方法:

          mappedRemoveAll
          mappedDestroy
          mappedDestroyAll

或者如何将对fromJS方法的多个调用与键映射结合起来,以便使用mappedRemove方法。我得到一个错误,我的对象不支持mappedRemove。

我假设您有一个高级searchResult对象,它包含对您提到的所有其他复杂对象的引用。在这种情况下,假设您的顶级viewModel如下所示:

var vm = {
    something: ko.observable(),
    somethingElse: ko.observable(),
    searchResult: ko.observable()
};

处理所有映射并将生成的大型对象分配给searchResult。那么,您需要做的就是为searchResult指定一个不同的值。Knockout将尽可能高效地处理所有DOM元素处理。您的旧对象将不再被任何对象引用,因此垃圾收集器将清理它。如果页面的其他部分保留了vm.searchResult中的引用,那么您可以实现一个dispose函数并清理这些引用。

更多详细信息或一些代码将有助于…@Benjamin Gruenbaum:有没有办法一下子将映射插件fromJS创建的整个视图模型吹走,比如MyViewModel.empty?为什么要清空它?您可以删除它绑定到的元素,也就是说,如上面链接中所述反转applyBindings,然后让GC处理它。它是一个复杂的嵌套对象,使用嵌套foreach绑定绑定到许多DOM元素。使用视图模型不是为了不直接处理UI,而是为了处理模型,这不是重点吗?我在寻找一种方法来告诉knockout,这个模型已经失效了。请删除knockout从中创建的所有DOM元素。我的searchResults对象将提供给插件的mapping.fromJS方法。我的searchResults对象,在映射之前是一组标题对象;每个标题对象包含搜索词出现的上下文段落;文章中的每个词本身就是一个具有属性的对象。我已经编辑了我的问题来解释哪些插件方法我遇到了问题。