骨干子视图无法正确删除

时间:2017-07-13 11:32:18

标签: javascript jquery backbone.js

我有一个OuterView和一个包含多个ChildView的MainView。对于OuterView中的某些事件,我将关闭当前的MainView(它会在每个ChildView上启动一个关闭函数),然后我将使用不同的ChildView重新渲染一个新的MainView(没有什么能阻止ChildView出现在一个MainView上,然后出现在另一个MainView上 - 将MainView视为稍微不同的查询/过滤器。)

虽然我正在查看MainView,但某些操作/事件可以删除单个ChildView,并调用其关闭功能。它目前的工作方式如下:

1)如果我之前从未见过ChildView(例如,只刷新整个页面,或者同时更改了MainView并看到了ChildView),删除它效果很好

2)如果我之前看过ChildView(例如,在我的OuterView中我转到第1页过滤器,然后转到第2页,然后回到第1页),当我的ChildView上触发remove事件时,它没有&# 39;删除视图/ HTML,即使它通过关闭功能。

我的MainView关闭功能如下所示:

            close: function() {
                for (var key in this.childViews) {
                    this.childViews[key].close();
                }

                this.undelegateEvents();
                this.$el.empty();
                this.stopListening();
                this.remove();
        },

My ChildView关闭功能如下所示:

        close: function() {
            this.$el.empty();
            this.stopListening();         
            this.remove();
        }

有人知道为什么我的ChildView如果以前见过那么关闭不好吗? (我猜它第一次没有被删除,所以关闭视图会出问题。)

谢谢, 克里斯

1 个答案:

答案 0 :(得分:0)

如果没有看到其余的代码,很难知道,但是如果没有抛出控制台错误,我猜你的子视图没有附加到你认为的DOM元素上。

在您的ChildView关闭方法中,请在清空后尝试添加console.log(this.$el[0])。如果记录的div为空,但您的html仍在页面上,则视图可能使用分离的div,而不是您认为的页面元素。

当您操作的视图可能附加到的DOM元素时,您可以使用setElement确保它们附加在正确的位置。