Javascript Can';t在主干网项目中杀死僵尸集合

Javascript Can';t在主干网项目中杀死僵尸集合,javascript,backbone.js,collections,zombie-process,Javascript,Backbone.js,Collections,Zombie Process,在我的主干项目中,我有一个路由器,它创建一个视图,viewA viewA创建子视图,viewA2作为其渲染过程的一部分 viewA2有一个包含卡片模型的集合,但我也在viewA2的initialize()函数中声明了另一个标签模型集合。像这样: initialize: function() { this.tagCollection = new tagModels.TagCollection(); this.tagCollection.fetch({

在我的主干项目中,我有一个路由器,它创建一个视图,
viewA

viewA
创建子视图,
viewA2
作为其渲染过程的一部分

viewA2
有一个包含卡片模型的集合,但我也在
viewA2
initialize()
函数中声明了另一个标签模型集合。像这样:

initialize: function() {

        this.tagCollection = new tagModels.TagCollection();

        this.tagCollection.fetch({
            reset: true
        });
        this.listenTo(this.collection, 'change:tags', this.updateContentList);
        this.listenTo(this.collection, 'reset remove', this.updateContentList);
        this.listenTo(this.tagCollection, 'reset', this.resetTags);
        this.listenTo(this.tagCollection, 'add', this.addTag);
        this.listenTo(this.tagCollection, 'remove', this.removeTag);
}
现在,路由器会在应用程序中切换页面,去掉
viewA
,并用
viewB
替换它。在切换到
viewB
之前,我会:

viewA2.tagCollection.reset();
viewA2.remove();
viewA.remove();
根据Chrome中的主干扩展,
viewA
viewA2
都已销毁,但
viewA2.tagCollection
仍然存在,即使它已重置且不包含任何型号。每次切换视图时,都会添加另一个集合

为什么空收藏没有消失?它所属的视图已不存在。在删除
viewA2
之前,我也尝试过
viewA2.stopstending()

我意识到绕过此问题的一种方法是在链的更上层创建
tagCollection
,例如在路由器中,并将对它的引用传递到
viewA
,然后从那里传递到
viewA2
。对于我的应用程序来说,这可能是一个更好的设计,但在视图链中上下传递引用感觉很笨拙。我应该采取这种方法吗


最后。我知道在一个视图中听两个集合可能不是最佳实践。如果这被认为是一个主要问题,我可以提供更多的细节,说明我为什么这样做。

我似乎被主干Chrome扩展的输出分心了。当视图被删除时,它会对视图进行评分,但当集合被销毁时,它不会对集合进行评分,至少在本例中是这样

我的僵尸收藏多次触发相同的事件,因为它们挂在后台。事实证明,在删除
viewA
之前删除
viewA2
实际上已经解决了这个问题

主干Chrome的输出让我相信这些集合仍然在内存中,但自从在视图之前删除子视图以来,事件不再被多次触发


在对旧集合使用javascript
delete
之后,我还尝试将集合详细信息写入控制台,以确认它们不存在。(谢谢@ivarni。)删除的收藏没有定义,但在主干Chrome扩展中仍然有一个明显有效的条目。

请原谅这个笨拙的引用,但是你有没有试着击中它的头部?@Elliot Bonneville可能会这样…:/
delete viewA2.tagCollection
摆脱它吗?@ivarni-不,没有。删除了标记。除非是关于扩展开发,否则不要使用它。是的,我正要说我不相信你,你说
delete
没有删除它:)