UNPKG

todomvc

Version:

> Helping you select an MV\* framework

116 lines (96 loc) 2.46 kB
define([ 'js/core/Application', 'app/model/Todo', 'app/collection/TodoList', 'js/data/FilterDataView', 'js/data/LocalStorageDataSource' ], function (Application, Todo, TodoList, FilterDataView, DataSource) { var ENTER_KEY = 13; return Application.inherit('app.TodoClass', { /** * Initializes the app * In this method we set the initial models */ initialize: function () { this.set('todoList', null); this.set('filterList', null); this.callBase(); }, /** * Are triggered */ showAll: function () { this.$.filterList.set('filter', 'all'); }, showActive: function () { this.$.filterList.set('filter', 'active'); }, showCompleted: function () { this.$.filterList.set('filter', 'completed'); }, /** * The rest is just controller stuff */ addNewTodo: function (e) { if (e.domEvent.keyCode === ENTER_KEY) { var title = e.target.get('value').trim(); var newTodo; if (title) { newTodo = this.$.dataSource.createEntity(Todo); newTodo.set({ title: title, completed: false }); this.get('todoList').add(newTodo); // save the new item newTodo.save(); e.target.set('value', ''); } } }, markAllComplete: function (e) { this.get('todoList').markAll(e.target.$el.checked); }, clearCompleted: function () { this.get('todoList').clearCompleted(); }, removeTodo: function (e) { var todo = e.$; todo.remove(null, function (err) { if (!err) { this.get('todoList').remove(todo); } }.bind(this)); }, /** * Start the application and render it to the body ... */ start: function (parameter, callback) { this.set('todoList', this.$.dataSource.createCollection(TodoList)); // fetch all todos, can be done sync because we use localStorage this.$.todoList.fetch(); this.set('filterList', new FilterDataView({ baseList: this.get('todoList'), filter: 'all', filterFnc: function (item) { var filter = this.$.filter; if (filter === 'active') { return !item.isCompleted(); } else if (filter === 'completed') { return item.isCompleted(); } else { return true; } }}) ); // false - disables autostart this.callBase(); }, translateItems: function (num) { return num === 1 ? 'item' : 'items'; }, selectedClass: function (expected, current) { return expected === current ? 'selected' : ''; } }); });