我广泛使用模板,我喜欢用完全包含模板。我的意思是我想看到template对所有 DOM 元素进行编码,包括root一,像这样:
<script type="text/template" id="template-card">
<div class="card box" id="card-<%= id %>">
<h2><%= title %></h2>
<div><%= name %></div>
</div>
</script>
但 Backbone 喜欢的是template像这样:
<script type="text/template" id="template-card">
<h2><%= title %></h2>
<div><%= name %></div>
</script>
并定义rootJS 代码中的元素及其属性。我的想法是丑陋且令人困惑的。
So, 有什么好方法可以避免我的 Backbone View 用额外的 DOM 元素包装我的模板吗?
我一直在检查这个问题线程:https://github.com/documentcloud/backbone/issues/546我知道没有任何官方方法可以做到这一点..但也许您可以向我推荐一种非官方方法。
您可以利用view.setElement渲染完整的模板并将其用作视图元素。
设置元素 view.setElement(元素)
如果您想将 Backbone 视图应用到不同的 DOM 元素,请使用 setElement,它将
还创建缓存的 $el 引用并移动视图的委托
从旧元素到新元素的事件
您必须考虑两点:
-
setElement
calls undelegateEvents
,处理视图事件,但要小心删除您可能自己设置的所有其他事件。
-
setElement
不会将元素注入到 DOM 中,你必须自己处理。
也就是说,你的视图可能看起来像这样
var FullTemplateView = Backbone.View.extend({
render: function () {
var html, $oldel = this.$el, $newel;
html = /**however you build your html : by a template, hardcoded, ... **/;
$newel = $(html);
// rebind and replace the element in the view
this.setElement($newel);
// reinject the element in the DOM
$oldel.replaceWith($newel);
return this;
}
});
以及一个可以使用的示例http://jsfiddle.net/gNBLV/7/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)