我有一个全文搜索应用。随着用户发起的每个新搜索,从服务器返回的上下文段落和相关描述性数据被映射到使用映射插件的视图模型。
但是在可以实例化新视图模型之前,需要销毁从先前搜索实例化的视图模型,并从DOM中创建从中创建的所有DOM元素。
使用映射插件创建的陈旧ViewModel的破坏(或删除项目)的正确方法是什么?
编辑: 我不明白,从documentation,如何使用这些方法中的任何一种:
mappedRemoveAll
mappedDestroy
mappedDestroyAll
或如何将fromJS
方法的多个调用与key mapping
组合在一起,以便我可以使用mappedRemove
方法。我收到的错误是我的对象不支持mappedRemove
。
答案 0 :(得分:0)
我假设你有一个高级searchResult
对象,它包含你提到的所有其他复杂对象的引用。在这种情况下,让我们说你的顶级viewModel看起来像这样:
var vm = {
something: ko.observable(),
somethingElse: ko.observable(),
searchResult: ko.observable()
};
并处理所有映射并将生成的大对象分配给searchResult
。好吧,那么你需要做的就是为searchResult分配一个不同的值。 Knockout将尽可能有效地处理所有DOM元素处理。并且您的旧对象将不再被任何引用,因此垃圾收集器将清理它。如果页面的其他部分保留在vm.searchResult
内的引用,那么您可以实现一个dispose函数并清理它们。