todomvc
Version:
> Helping you select an MV\* framework
73 lines (65 loc) • 1.4 kB
JavaScript
/*jshint newcap:false */
/*global Class, include */
(function () {
'use strict';
var Todo = Class({
Base: Class.Serializable,
// Properties with default values
title: '',
completed: false
});
include.exports = Class.Collection(Todo, {
Store: Class.LocalStore('todos-atmajs'),
create: function (title) {
// `push` initilizes the `Task` instance. It does the same
// as if we would do this via `new Task({title: title})`
return this
.push({
title: title
})
.save();
},
toggleAll: function (completed) {
this
.forEach(function (task) {
task.completed = completed;
})
.save();
},
status: {
count: 0,
todoCount: 0,
completedCount: 0,
},
Override: {
// Override mutators and recalculate status,
// which will be used lately in M-V bindings
save: function () {
return this
.super(arguments)
.calcStatus();
},
del: function () {
return this
.super(arguments)
.calcStatus();
},
fetch: function () {
return this
.super(arguments)
.calcStatus();
}
},
calcStatus: function () {
var todos = 0;
var completed = 0;
this.forEach(function(todo){
todo.completed && ++completed || ++todos;
});
this.status.count = this.length;
this.status.todoCount = todos;
this.status.completedCount = completed;
return this;
}
});
}());