Backbone.Marionette:将标题添加到集合视图

Wil*_*l M 8 javascript backbone.js marionette

使用Backbone.Marionette,我想呈现项目的集合以及标题.

我知道Marionette.CollectionView没有模板,因为它只渲染ItemViews.

我目前正在使用Marionette.LayoutView,但必须为'list'区域定义一个额外的DOM元素.

有没有其他方法可以做到这一点?可能没有额外的DOM元素?

也许我可以改变open()这个特定的地区?


目前的结果:

<div class='collection'>
  <h3>Featured</h3>
  <div class="list"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

期望的结果:

<div class='collection'>
  <h3>List Name</h3>
  <ul>
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
   </ul>
</div>
Run Code Online (Sandbox Code Playgroud)

渲染代码:

var col = new LCollection([{name: "foo"}, {name: "bar"}]); // Defined earlier, not relevant here
var list = new ListView({collection: col});
var layout = new MyLayout({model: new Backbone.Model({name: "Featured"})});

app.featured.show(layout);
layout.list.show(list);
Run Code Online (Sandbox Code Playgroud)

意见:

var ListItemView = Backbone.Marionette.ItemView.extend({
  template: '#list-item',
  tagName: 'li'
});

var LessonListView = Backbone.Marionette.CollectionView.extend({
  tagName: 'ul',
  itemView: ListItemView
});

var MyLayout = Backbone.Marionette.Layout.extend({
  template: "list-layout",

  regions: {
    list: '.list'
  }
});
Run Code Online (Sandbox Code Playgroud)

模板:

<script type="text/template" id="list-item">
  <%= name %>
</script>

<script type="text/template" id="list-layout">
  <h3><%= name %></h3>
  <div class="list"></div>
</script>
Run Code Online (Sandbox Code Playgroud)

Mar*_*way 14

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md

适用于你:

模板

<script id="list-item" type="text/html">
  <%= name %>
</script>

<script id="list-layout" type="text/html">
    <div class='collection'>
        <h3><%= name %></h3>
        <ul></ul>
    </div>
</script>
Run Code Online (Sandbox Code Playgroud)

JS

RowView = Backbone.Marionette.ItemView.extend({
  tagName: "li",
  template: "#list-item"
});

TableView = Backbone.Marionette.CompositeView.extend({
  itemView: RowView,
  // specify a jQuery selector to put the itemView instances in to
  itemViewContainer: "ul",
  template: "#list-layout"
});
Run Code Online (Sandbox Code Playgroud)

  • 这些天它是"childView"和"childViewContainer"而不是"itemView"和"itemViewContainer" (5认同)