Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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 主干JS:没有$(';body';)之类内容的呈现模板。附加?_Javascript_Backbone.js - Fatal编程技术网

Javascript 主干JS:没有$(';body';)之类内容的呈现模板。附加?

Javascript 主干JS:没有$(';body';)之类内容的呈现模板。附加?,javascript,backbone.js,Javascript,Backbone.js,使用外部模板,我试图将主干JS视图呈现给DOM。不幸的是,我只得到一个空白屏幕,而通过控制台检查确认一切正常 要在DOM中获取呈现的模板,我必须执行类似于$('body').append(myView.render().el)的操作,根据许多参考资料,这是不必要的。例如,从TodoMVC项目的主干实现来看,它没有包含任何类似于$('body').append的内容,这使我相信我的代码中有错误,但我找不到它 my HTML中的模板如下所示: <script id="name-template

使用外部模板,我试图将主干JS视图呈现给DOM。不幸的是,我只得到一个空白屏幕,而通过控制台检查确认一切正常

要在DOM中获取呈现的模板,我必须执行类似于
$('body').append(myView.render().el)的操作,根据许多参考资料,这是不必要的。例如,从TodoMVC项目的主干实现来看,它没有包含任何类似于
$('body').append的内容,这使我相信我的代码中有错误,但我找不到它

my HTML中的模板如下所示:

<script id="name-template" type="text/template">
    <%= name %> (<%=age %>)
</script>

我必须更改什么,以便在页面加载时,将呈现的模板添加到DOM中?

短消息是,
el
可以指向已经是DOM一部分的元素,如果这样做,则不需要手动附加它。为此,您可以在创建视图实例时简单地传入引用,例如

App.personView = new App.Views.Person({model: personModel, el: '#someElement'});
App.personView.render();
这是稍微长一点的版本

主干
el
实际上只是对DOM元素的引用,无论它是否已附加到页面,从这个意义上讲,它与对DOM元素的常规引用没有任何区别。考虑下面的普通香草JavaScript代码< /P>
var pElement = document.createElement("p");
var pElement = $('p'); //using jQuery
此时,pElement包含对DOM元素的引用,但尚未附加到页面。除非您使用如下方式将其附加到页面,否则附加到此
p
元素的任何内容都不会可见

document.body.appendChild(pElement);
$('body').append(pElement); //or using jQuery
如果您没有创建新的
p
元素,而是获得了对现有元素的引用,那么您对该元素所做的任何更改都会立即反映在页面上

var pElement = document.getElementById('#myPElement');
var pElement = $('#myPElement'); //using jquery

此时,您可以根据需要操纵pElement,而无需将其附加到页面上,因为它已经是页面的一部分。

在todoMVC示例中,view元素已经在页面上,但look-in和必须呈现视图的div-in是硬编码的。同样,应用程序可以有一个div,视图将被渲染到其中,否则$('body')是唯一可以将
el
设置为指向现有DOM元素的方法,如果这样做,则无需再次附加它。我认为将现有DOM与主干应用程序链接是一种不好的做法,会产生不必要的紧密耦合。@UziKilon这也是我的观点,这就是我实际上试图避免“手动附加”的原因。但是,当使用模板时,没有办法解决这个问题,这是对的吗?(这意味着,我们需要更多地关注模板是如何组合起来的)@Sven使用模板实际上不会改变这一切,它只是一种更简单/更干净的生成所需html的方法。我想你可能误解了el是什么,我在回答中试图澄清一下。谢谢你的解释!事实上,我认为el
是一些魔术表演的一部分。我没想到这只是一个简单的参考。
var pElement = document.getElementById('#myPElement');
var pElement = $('#myPElement'); //using jquery