2013-11-15 40 views
1

在骨干网的渲染功能,Backbone.js为什么渲染函数中没有可用的DOM?

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

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

第一的console.log返回“未定义” ......

第二个返回一个DOM节点。

为什么不在没有超时的渲染函数中使用DOM?

+0

当/如何'这一点。 el'被添加到dom中? –

回答

3

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

setTimeout调用使得浏览器在不再忙于运行代码时调用代码,当渲染完成并且元素已被添加到文档中时,会发生这种情况。

如果您使用的元素范围在jQuery的电话时,它会发现DIV尽管它已经不是在文件中:

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

或:

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

或['this。$('#customID')[0]'](http://backbonejs.org/#View-dollar)。 –

+1

你不应该试图在骨干中做到这一点?什么是适当的主干方式来做到这一点?添加回调?我遇到了这个问题,因为不知道将.datepicker方法附加到render函数中的dom元素上。由于该元素尚未添加到文档中,因此我基本上将该功能附加到了无。 – natecraft1

+0

你按照Mu的建议 - 使用这个。$(...)。这个。$是指文档片段。 –

相关问题