关于 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)。

还有其他解决方案吗?

  • 您想在 el 附加到 DOM 时收到通知吗?
  • 当然,如果这样的事情存在。 this.$el.closest(‘html’).length 有效,但似乎有点骇人听闻。如果有更好的,请告诉我们。我的同事使用了 .livequery() 但我觉得使用它不合适。我现在正在使用我的第二个解决方案,其中 el 始终在 DOM 中
  • closest(‘html’) 如果您想知道它现在是否在那里,但它不会告诉您是否有人稍后将 el 添加到 DOM。 livequery 也很笨拙。您也许可以指定人们必须将 el 添加到 DOM 作为调用 render 的一部分,然后使用 setTimeout(…, 0) hack。 onshow 究竟需要做什么?
  • 最近有一个关于类似问题的问题:stackoverflow.com/questions/12785861/…


如果元素需要在 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();

希望这会有所帮助。

  • 我正在做类似的事情,通过使用 .appendTo() 组合你的前 2 行


来源:https://www.codenong.com/12964094/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?