Commit ab586ed8 authored by Sébastien Chopin's avatar Sébastien Chopin

Use this.$el, model.destroy() and change application behavior on add and complete todo.

parent f990a4a8
...@@ -4,31 +4,18 @@ define([ ...@@ -4,31 +4,18 @@ define([
], function( _, Backbone ) { ], function( _, Backbone ) {
var TodoModel = Backbone.Model.extend({ var TodoModel = Backbone.Model.extend({
// Default attributes for the todo. // Default attributes for the todo
// and ensure that each todo created has `title` and `completed` keys.
defaults: { defaults: {
title: '', title: '',
completed: false completed: false
}, },
// Ensure that each todo created has `title`.
initialize: function() {
if ( !this.get('title') ) {
this.set({
'title': this.defaults.title
});
}
},
// Toggle the `completed` state of this todo item. // Toggle the `completed` state of this todo item.
toggle: function() { toggle: function() {
this.save({ this.save({
completed: !this.get('completed') completed: !this.get('completed')
}); });
},
// Remove this Todo from *localStorage* and delete its view.
clear: function() {
this.destroy();
} }
}); });
......
...@@ -12,7 +12,7 @@ define([ ...@@ -12,7 +12,7 @@ define([
// Instead of generating a new element, bind to the existing skeleton of // Instead of generating a new element, bind to the existing skeleton of
// the App already present in the HTML. // the App already present in the HTML.
el: $('#todoapp'), el: '#todoapp',
// Compile our stats template // Compile our stats template
template: _.template( statsTemplate ), template: _.template( statsTemplate ),
...@@ -30,11 +30,12 @@ define([ ...@@ -30,11 +30,12 @@ define([
initialize: function() { initialize: function() {
this.input = this.$('#new-todo'); this.input = this.$('#new-todo');
this.allCheckbox = this.$('#toggle-all')[0]; this.allCheckbox = this.$('#toggle-all')[0];
this.$footer = $('#footer'); this.$footer = this.$('#footer');
this.$main = $('#main'); this.$main = this.$('#main');
Todos.on( 'add', this.addOne, this ); Todos.on( 'add', this.addAll, this );
Todos.on( 'reset', this.addAll, this ); Todos.on( 'reset', this.addAll, this );
Todos.on( 'change:completed', this.addAll, this );
Todos.on( 'all', this.render, this ); Todos.on( 'all', this.render, this );
Todos.fetch(); Todos.fetch();
}, },
...@@ -113,7 +114,7 @@ define([ ...@@ -113,7 +114,7 @@ define([
// Clear all completed todo items, destroying their models. // Clear all completed todo items, destroying their models.
clearCompleted: function() { clearCompleted: function() {
_.each( Todos.completed(), function( todo ) { _.each( Todos.completed(), function( todo ) {
todo.clear(); todo.destroy();
}); });
return false; return false;
......
...@@ -31,10 +31,8 @@ define([ ...@@ -31,10 +31,8 @@ define([
// Re-render the titles of the todo item. // Re-render the titles of the todo item.
render: function() { render: function() {
var $el = $( this.el ); this.$el.html( this.template( this.model.toJSON() ) );
this.$el.toggleClass( 'completed', this.model.get('completed') );
$el.html( this.template( this.model.toJSON() ) );
$el.toggleClass( 'completed', this.model.get('completed') );
this.input = this.$('.edit'); this.input = this.$('.edit');
return this; return this;
...@@ -47,7 +45,7 @@ define([ ...@@ -47,7 +45,7 @@ define([
// Switch this view into `"editing"` mode, displaying the input field. // Switch this view into `"editing"` mode, displaying the input field.
edit: function() { edit: function() {
$( this.el ).addClass('editing'); this.$el.addClass('editing');
this.input.focus(); this.input.focus();
}, },
...@@ -61,7 +59,7 @@ define([ ...@@ -61,7 +59,7 @@ define([
this.clear(); this.clear();
} }
$( this.el ).removeClass('editing'); this.$el.removeClass('editing');
}, },
// If you hit `enter`, we're through editing the item. // If you hit `enter`, we're through editing the item.
...@@ -71,9 +69,9 @@ define([ ...@@ -71,9 +69,9 @@ define([
} }
}, },
// Remove the item, destroy the model. // Remove the item, destroy the model from *localStorage* and delete its view.
clear: function() { clear: function() {
this.model.clear(); this.model.destroy();
} }
}); });
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment