Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js为什么不';渲染函数中没有可用的DOM吗?_Javascript_Dom_Backbone.js_Render - Fatal编程技术网

Javascript Backbone.js为什么不';渲染函数中没有可用的DOM吗?

Javascript Backbone.js为什么不';渲染函数中没有可用的DOM吗?,javascript,dom,backbone.js,render,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); } render:function(){ 这是。$el.html(' log($('#cus

在主干的渲染功能中

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

    console.log($('#customID')[0]);
    setTimeout(function(){
        console.log($('#customID')[0]);
    }, 1);
}
render:function(){
这是。$el.html('
log($('#customID')[0]);
setTimeout(函数(){
log($('#customID')[0]);
}, 1);
}
第一个console.log返回“undefined”

第二个返回一个DOM节点


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

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

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

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

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


this.el
何时/如何添加到dom?您不应该尝试在主干网中执行此操作吗?正确的主干网方式是什么?添加回调?我遇到这种情况是因为不知道在渲染函数中的dom元素的何处附加.datepicker方法。从元素开始,我基本上没有附加函数尚未添加到文档中。请按照Mu的建议执行-使用此项。$(…).this.$指的是文档片段。@EdwardsMith:Correction:
this。$
是一个函数,它使用文档片段作为jQuery调用的作用域。
this.el
指的是文档片段,而
指的是。$el
指的是包含文档片段的jQuery对象。两者都可以用于查找文档片段。@natecraft1:主干的呈现模型不便于在元素添加到文档后对其应用任何内容。在大多数情况下,您可以在为视图创建的元素中找到该元素,但如果需要先将其添加到文档中(例如,如果需要先对其进行回流),您需要使用类似超时的解决方法。
console.log(this.$el.find('#customID')[0]);