JQuery/骨干删除在茉莉花中不起作用

JQuery/Backbone remove not working in Jasmine

本文关键字:茉莉花 不起作用 删除 JQuery      更新时间:2023-09-26

我正在Jasmine中测试Backbone View。当我调用视图的 remove 方法时,该元素实际上并未被删除。

我的视图中有这个事件处理程序:

onModelChange: function() {
  this.$el.html('');
  this.render();
}

我必须以这种方式编写它,因为手动设置 html 是删除它的唯一方法。调用 remove 不会执行任何操作,当视图再次呈现自身时,它只会呈现追加到旧内容的新内容。我什至尝试从 Chromium 中的开发人员工具中调用 remove 但这也不起作用。但是,当我在浏览器中手动测试它时,删除确实有效,但它在 Jasmine 中不起作用,它搞砸了我的测试。

我认为问题的答案在于jQuery源代码:

remove: function( selector, keepData /* Internal Use Only */ ) {
        var elem,
            elems = selector ? jQuery.filter( selector, this ) : this,
            i = 0;
        for ( ; (elem = elems[i]) != null; i++ ) {
            if ( !keepData && elem.nodeType === 1 ) {
                jQuery.cleanData( getAll( elem ) );
            }
            if ( elem.parentNode ) {
                if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
                    setGlobalEval( getAll( elem, "script" ) );
                }
                elem.parentNode.removeChild( elem ); // right here to be specific
            }
        }
        return this;
    },

remove 函数依赖于节点的父节点来执行删除。我猜当测试在业力中运行时,主干视图的节点没有父节点。为了进一步探索,我调试了测试。在控制台中,如果我查询视图元素的子元素并将其删除,它将起作用。