Backbone.js为什么渲染函数中没有DOM?

时间:2013-11-15 02:03:47

标签: javascript dom backbone.js render

在骨干的渲染功能中,

render: function() {
    this.$el.html('<div id="customID"></div>

    console.log($('#customID')[0]);
    setTimeout(function(){
        console.log($('#customID')[0]);
    }, 1);
}

第一个console.log返回“undefined”...

第二个返回DOM节点。

为什么没有超时的渲染功能中没有DOM可用?

1 个答案:

答案 0 :(得分:3)

那是因为该元素尚未添加到文档中。 DOM可用,但元素不在其中。

setTimeout调用使浏览器在不忙于运行代码时调用代码,并且在渲染完成且元素已添加到文档时发生。

如果你在jQuery调用中使用元素作为作用域,它将找到div,尽管它不在文档中:

console.log($('#customID', this.$el)[0]);

或:

console.log(this.$el.find('#customID')[0]);