关于 jquery:如何在 Backbone 视图中测试 el 是否附加到 DOM?

How to test if el is attached to the DOM in a Backbone view?

我需要知道 View 中的 el 是否已附加到 DOM,因为我正在尝试应用 jQuery 插件,但该插件要求 el 首先在 DOM 中。

灵感来自
如何检查 jQuery 元素是否在 DOM 中?我得到这个工作:

1
2
3
4
5
6
render : function() {
    ...
    if (this.$el.closest('html').length)    // test if in DOM
        this.$el.someJqueryPlugin();
    return this;
}

我还需要此视图的所有者在将 el 插入 DOM 后立即触发"onshow",这是可行的,但有点笨拙。

我能想到的另一个解决方案是这样做:

1
2
var el = $('').appendTo(somewhereInsideDOM);
var view = new view(el:el);

在这种情况下,el 将始终附加到 DOM,这样就不会那么笨拙了,但缺点是操纵 el 意味着操纵 DOM。最后,使用这种方法,this.className 不受尊重。需要一个附加的 .addClass(this.className)

还有其他解决方案吗?


如果元素需要在 DOM 中,最好将其附加到 body,例如

1
2
3
4
5
6
var el = $('').css({ display: 'none' }),
    view;

$(body).append(el);
view = new View({ el: el });
el.somejQueryPlugin().show();

希望这会有所帮助。