var Marionette = require('backbone.marionette');
var tpl = require('./footer.hbs');
/**
* @version 1.0.0
* @description Footer View
* @module views/layout/footer/footer
* @link {http://marionettejs.com/}
*/
module.exports = Marionette.ItemView.extend({
/** template */
template: tpl,
/**
* @desc UI bindings create cached attributes that
* point to jQuery selected objects
*/
ui: {
filters: '#filters a'
},
/** events */
events: {
'click #clear-completed': 'onClearClick'
},
/** collectionEvents */
collectionEvents: {
'all': 'render'
},
/** templateHelpers */
templateHelpers: {
activeCountLabel: (this.activeCount === 1 ? 'item' : 'items') + ' left'
},
/**
* @func serializeData
* @returns {{activeCount: number, totalCount: *, completedCount: number}}
*/
serializeData: function () {
var active = this.collection.getActive().length;
var total = this.collection.length;
return {
activeCount: active,
totalCount: total,
completedCount: total - active
};
},
/**
* @desc use onRender only for update after
* first render / show
* @func onRender
*/
onRender: function() {
this.update();
},
/**
* @desc use onShow rather than onRender
* because DOM is not ready
* and this.$el find or parent will
* return nothing
* @func onShow
*/
onShow: function () {
this.update();
},
/**
* @desc onClearClick event handler
* @func onClearClick
*/
onClearClick: function () {
var completed = this.collection.getCompleted();
completed.forEach(function (todo) {
todo.destroy();
});
},
/**
* @func update
*/
update: function() {
this.$el.parent().toggle(this.collection.length > 0);
}
});