Source: views/todos/collection.js

var Marionette = require('backbone.marionette');

var TodoItemView = require('./item');
var tpl = require('./collection.hbs');


/**
 * @version 1.0.0
 * @description Item List View - Controls the rendering of the items, including the
 * filtering of active vs completed items for display.
 * Requires the module {@link module:views/todos/item}.
 * @module views/todos/collection
 * @requires module:views/todos/item
 * @link {http://marionettejs.com/}
 */
module.exports = Marionette.CompositeView.extend({

    /** template */
    template: tpl,

    /** itemView */
    itemView: TodoItemView,

    /** itemViewContainer */
    itemViewContainer: '#todo-list',

    /**
     * @desc UI bindings create cached attributes that
     * point to jQuery selected objects
     */
    ui: {
        toggle: '#toggle-all'
    },

    /** click events */
    events: {
        'click @ui.toggle': 'onToggleAllClick'
    },

    /** collection events */
    collectionEvents: {
        'all': '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();
    },

    /**
     * @func update
     */
    update: function () {

        /**
         * @func reduceCompleted
         * @param left
         * @param right
         * @returns {*}
         */
        function reduceCompleted(left, right) {
            return left && right.get('completed');
        }

        var allCompleted = this.collection.reduce(reduceCompleted, true);

        this.ui.toggle.prop('checked', allCompleted);
        this.$el.parent().toggle(!!this.collection.length);
    },

    /**
     * @desc toggle all click event handler
     * @func onToggleAllClick
     * @param e - event
     */
    onToggleAllClick: function (e) {
        var isChecked = e.currentTarget.checked;

        this.collection.each(function (todo) {
            todo.save({ 'completed': isChecked });
        });
    }

});
DocStrap Copyright © 2012-2014 The contributors to the JSDoc3 and DocStrap projects.
Documentation generated by JSDoc 3.2.2 on Mon May 18th 2015 using the DocStrap template.