[英]Backbone.js - render a new element to the page
假设您在 View 中创建了一个新元素 - 即您没有使用el
定位页面上的现有元素。
var StudentView = Backbone.View.extend({
tagName: 'article',
className: 'student-name',
template: _.template($('#name-tpl').html()),
render: function(){
var student_tpl = this.template({name: 'Rikard'});
this.$el.html(student_tpl);
}
});
然后实例化 View 并调用它的 render 方法:
var student_view = new StudentView();
student_view.render();
您的 HTML 包含以下模板:
<div class="target">
<script id="name-tpl" type="text/template">
<%= name %>
</script>
</div>
这不会将新创建的元素打印到页面。 如果我们将el
设置为.target
,那么它会起作用,但是它不会打印您在视图中设置的标签名称或类名称。
有没有办法将新创建的元素打印到页面上? 我想过使用 jQuery append
,但似乎应该有一个更面向主干的解决方案。
除非您使用el
选项将视图附加到 DOM 中的现有元素, backbone.js会在内存中创建一个HTMLElement
,与DOM
分离。 您有责任将它附加到您想要的位置(主干为您创建一个新元素,但它不知道您希望将它添加到 DOM 中的哪个位置)。
如果您已经有一个Backbone.View
并且想要将其设置为不同的元素,则可以使用setElement
,但在这种情况下,您也有责任确保该元素是DOM
一部分。
如果 Backbone 给了你一种方法来指定元素在 DOM 中的位置,那看起来像:
{
tagName: 'article',
elPosition: '#container > .content+div:nth-child(3)'
}
同样,会出现混淆,比如元素应该添加在elPosition
之前还是之后等等。这看起来很难看,难怪为什么主干把它留给你而不是设置更多规则。 在我看来,与其他框架相比,backbone 设置的规则更少,给你更多的自由(当你不知道如何处理自由时,它会很痛苦:)
我们通常做的是,使用el
选项让主父view
指向 DOM 中的包含元素,例如<body>
。
然后像this.$el.appendTo(parentView.$el);
将子视图附加到它this.$el.appendTo(parentView.$el);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.