I’m building an application using backbone and marionette.js. I’m planning on using a collection view to present some items and then allow them to be filtered, sorted and grouped.
I was wondering if there are any good design ideas for actually appending the html in a grouped fashion. I have a few ideas but I was wondering if someone might have input on which would be better design.
My first idea is to change the appendHtml method on the collection view, and if grouping is enabled, I can have the appendHtml function either find or create the child group’s bin and place the child view in it.
appendHtml: function(collectionView, itemView, index){
var $container = this.getItemViewContainer(collectionView);
// get group from model
var groupName = itemView.model.get("group");
// try to find group in child container
var groupContainer = $container.find("." + groupName);
if(groupContainer.length === 0){
// create group container
var groupContainer = $('<div class="' + groupName + '">')
$container.append(groupContainer);
}
// Append the childview to the group
groupContainer.append(itemView);
}
My second idea is to break apart the collection into groups first and then maybe render multiple views… This one seems like it might be more work, but might also be a bit better as far as the code structure is concerned.
Any suggestions or thought eliciting comments would be great!
Thanks
Maybe not exactly what you’re looking for, but here’s a somewhat related question:
Backbone.Marionette, collection items in a grid (no table)
My solution to that issue — one fetched collection that could be rendered as a list or a grid (“items grouped in rows”) was to use _.groupBy() in a “wrapper” CompositeView and pass modified data down the chain to another CompositeView (row) and then down to an ItemView.
Here’s a demo:
http://jsfiddle.net/bryanbuchs/c72Vg/