销毁取消订阅的观察对象

销毁取消订阅的观察对象

问题描述:

我有以下情形: - 具有大量项目的应用程序。 (1mil +) - 列表1中每个项目的可观察值。销毁取消订阅的观察对象

如果我从应用程序初始化创建可观察对象,应用程序将冻结,因为它需要大量的处理和内存。解决方案是根据需要创建它们,因为项目一次会以部分形式呈现。这很容易做到。

我需要的是,我解绑后的项目,显示一个新的批次,销毁创建的观察对象,不再使用。

一个解决方案是,当我切换到新批处理时,迭代旧批处理并销毁。这也很容易做,但不幸的是还不够。

我的应用程序被拆分成组件,每个组件可能会或可能不会使用主项目池中的项目。这意味着我不能只搜索以前的项目,我解除绑定,只是销毁observables,但我必须搜索所有组件。从性能角度来看,这并不好,并且由于组件不需要彼此了解就不太好。

所以我的问题是。有没有什么方法(内置或不是)在淘汰赛中摧毁一个可观察的,一旦没有更多的用户呢?

谢谢。

+0

'ko.computed'必须手动处理,因为它会创建对其他可观察对象的新引用,但是一旦没有更多引用对JS进行垃圾回收时,便可观察对象。我错了吗? – 2013-04-23 13:28:45

+0

不是真的。 ko.computed有以下2个选项:处置时,处置时为了处理它们而被删除。观察对象基本上都附在模型上,所以除非你特意删除它们,否则它们不会被收集。我的问题是,我需要知道什么时候处理observables,像disposeWhenNodeIsRemoved这样的东西绝对是太棒了,但我没有找到类似的东西或回调。 – 2013-04-23 13:43:44

+0

您的“按需创建逻辑”是在单个位置还是在每个组件中?如果你可以把这个逻辑放在一个单一的位置,你是否也可以跟踪它们并解除之前的任何一个? – 2013-04-23 15:09:56

会不会Delete operator在这种情况下工作?如果删除某个对象的某些属性是您想要完成的操作,那么使用删除操作符应该做到这一点。

var viewModel = { name: ko.observable("me"),` age: "a lot" }; 

,当你准备(通过事件或其他方式)删除属性

$('element').on('event', function() { delete viewModel.prop; }); 

这是假设你要定位的淘汰赛视图模型对象中的一个属性。

+0

删除作为“删除的方法”。问题是跟踪我必须删除的内容。最初的问题是如果淘汰赛让我有可能跟踪而不是自己编写代码。 – 2013-05-14 06:21:02

+0

@DumitrescuBogdan我认为这就是你要找的。 [链接](http://www.knockmeout.net/2012/05/using-ko-native-pubsub.html) – 2013-05-14 22:45:23