我正在查看这里的 Angry Cats Backbone/Marionette 教程文章:
http://davidsulc.com/blog/2012/04/15/a-simple-backbone-marionette-tutorial/
http://davidsulc.com/blog/2012/04/22/a-simple-backbone-marionette-tutorial-part-2/
然后我在这里发现了同样的问题/需求:
Backbone.js turning off wrap by div in render
但是我只能使它适用于 Backbone.Views,而不是 Backbone.Marionette.ItemViews。
例如,从上面提供的简单的 Backbone Marionette 教程链接中,可以取得 AngryCatView 的代码:
AngryCatView = Backbone.Marionette.ItemView.extend({
template: "#angry_cat-template",
tagName: 'tr',
className: 'angry_cat',
...
});
模板 #angry_cat-template
的外观如下:
<script type="text/template" id="angry_cat-template">
<td><%= rank %></td>
<td><%= votes %></td>
<td><%= name %></td>
...
</script>
我不喜欢的是,AngryCatView 需要拥有
tagName: 'tr',
className: 'angry_cat',
--如果我把tagName
拿出来,那么angry_cat-template
将被<div>
包裹。我希望的是在一个地方指定HTML(即angry_cat-template),而不是让大多数HTML(所有的
<td>
标签)在angry_cat-template中并且只有一点HTML(<tr>
标签)在AngryCatView中。我希望在angry_cat-template中编写以下内容:<script type="text/template" id="angry_cat-template">
<tr class="angry_cat">
<td><%= rank %></td>
<td><%= votes %></td>
<td><%= name %></td>
...
</tr>
</script>
我觉得这样更清晰,但是我一直在尝试着使用 Derik Bailey 在“Backbone.js turning off wrap by div in render”中的答案来解决问题,但无法让它适用于 Backbone.Marionette。
有什么想法吗?
<tr>
元素。 - Jonathan Beeberender
方法。我已经在下面发布了解决方案。 - vaughanthis.$el = this.$el.children()
之后添加this.$el.unwrap()
可以解决重新渲染时出现的问题,而无需重新定义整个render
方法。 - thom_nic