ampersand-grouped-collection-view
Renders a collection of items that are clustered in groups, such as how chat messages can be displayed grouped by sender.
Part of the Ampersand.js toolkit for building clientside applications.
Install
npm install ampersand-grouped-collection-view
Example
var View = require('ampersand-view');
var GroupedCollectionView = require('ampersand-grouped-collection-view');
var view = new GroupedCollectionView({
el: someDOMElement,
collection: messagesCollection,
itemView: View.extend({
template: '<div><p data-hook="msg-body"></p><span data-hook="msg-time"><span></div>',
bindings: {
'model.body': {
type: 'text'
hook: 'msg-body'
},
'model.timestamp': {
type: 'text',
hook: 'msg-time'
}
}
}),
groupView: View.extend({
template: '<div><img data-hook="avatar"/><ul data-hook="messages"></ul></div>',
bindings: {
'model.avatar': {
type: 'attribute',
name: 'src',
hook: 'avatar'
}
},
render: function () {
this.renderWithTemplate();
this.cacheElements({
groupEl: '[data-hook=messages]'
});
}
}),
groupsWith: function (model, prevModel, currentGroup) {
return model.sender.id === prevModel.sender.id;
},
prepareGroup: function (model, prevGroup) {
return model.sender;
}
});