繁体   English   中英

正确使用Backbone.js和Marionette对集合进行分组

[英]Proper use of Backbone.js and Marionette to group collections

我不太确定如何使用Backbone.js和Marionette来组织我的收藏夹和视图。 因此,我所拥有的是一个相当简单的时间集合(开始,结束,输入)。 我想将此集合显示为表格,并在每4个条目之后重复表格的布局。

Date    Start   End
0   08:00   18:00
1   08:00   18:00
2   08:00   18:00
3   08:00   18:00

Date    Start   End
4   08:00   18:00
5   08:00   18:00
6   08:00   18:00
7   08:00   18:00

Date    Start   End
8   08:00   18:00
9   08:00   18:00

到目前为止,我创建的是带有ItemView的CompositeView,但是我不确定如何对集合进行分组和拆分。

这是一个jsfiddle: http : //jsfiddle.net/y799N/1/

HTML:

<script id="row-tmpl" type='text/template'>
    <td><%= date %></td>
    <td><%= start %></td>
    <td><%= end %></td>
</script>

<script id="grid-tmpl" type='text/template'>
        <thead>
            <th>Date</th>
            <th>Start</th>
            <th>End</th>
        </thead>
        <tbody id="bdy"></tbody>
</script>

使用Javascript:

var Row = Backbone.Marionette.ItemView.extend({
    template: '#row-tmpl',
    tagName: 'tr'
});

var Grid = Backbone.Marionette.CompositeView.extend({
    tagName: 'table',
    template: '#grid-tmpl',
    itemView: Row,

    appendHtml: function(collectionView, itemView){
        collectionView.$('#bdy').append(itemView.el);
    }
});

var Time = Backbone.Model.extend({
    defaults: {
        start : '08:00',
        lazy : '00:45',
        end: '18:00',
        date: 1
    }
});

var TimeCollection = Backbone.Collection.extend({
    model: Time
});

///
var times = new TimeCollection();
for(var i = 0;i<10;i++){
    times.add(new Time({date:i}));
}



var grid = new Grid({
    collection:times
});

grid.render();
console.log(grid.el);
$('#grid').html(grid.el);

最直接的方法是修改CompositeViewappendHtml函数,以便在需要标题时将其插入。

appendHtml : function (cv, itemView, index) {
  var $childContainer = this.$(this.itemViewContainer);
  if (index % 4 == 0) {
    $childContainer.append("<tr><td>Date</td><td>Start</td><td>End</td></tr>");
  }
  $childContainer.append(itemView.el);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM