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

时间:2012-10-18 21:33:01

标签: jquery backbone.js backbone-views

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

灵感来自 How do I check whether a jQuery element is in the DOM?我让这个工作:

render : function() {
    ...
    if (this.$el.closest('html').length)    // test if in DOM
        this.$el.someJqueryPlugin();
    return this;
}

我也需要这个视图的拥有者在el插入到DOM之后立即触发'onshow',这是可行的,但有点笨拙。

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

var el = $('<div>').appendTo(somewhereInsideDOM);
var view = new view(el:el);

在这种情况下,el将始终附加到DOM并且这种方式更不笨拙,但缺点是操纵el意味着操纵DOM。最后,使用此方法,this.className不受尊重。需要额外的.addClass(this.className)

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:1)

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

var el = $('<div />').css({ display: 'none' }),
    view;

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

希望这有帮助。