-
Notifications
You must be signed in to change notification settings - Fork 0
/
todo.js
executable file
·122 lines (96 loc) · 2.21 KB
/
todo.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
(function() {
window.App = {
Models: {},
Collections: {},
Views: {}
};
window.template = function(id) {
return _.template( $('#' + id).html() );
};
// Person Model
App.Models.Person = Backbone.Model.extend({
defaults: {
name: 'Guest User',
age: 30,
occupation: 'worker'
}
});
// A List of People
App.Collections.People = Backbone.Collection.extend({
model: App.Models.Person
});
// View for all people
App.Views.People = Backbone.View.extend({
tagName: 'ul',
initialize: function() {
this.collection.on('add', this.addOne, this);
},
render: function() {
this.collection.each(this.addOne, this);
return this;
},
addOne: function(person) {
var personView = new App.Views.Person({ model: person });
this.$el.append(personView.render().el);
}
});
// The View for a Person
App.Views.Person = Backbone.View.extend({
tagName: 'li',
template: template('personTemplate'),
initialize: function(){
this.model.on('change', this.render, this);
this.model.on('destroy', this.remove, this);
},
events: {
'click .edit' : 'editPerson',
'click .delete' : 'DestroyPerson'
},
editPerson: function(){
var newName = prompt("Please enter the new name", this.model.get('name'));
if (!newName) return;
this.model.set('name', newName);
},
DestroyPerson: function(){
this.model.destroy();
},
remove: function(){
this.$el.remove();
},
render: function() {
this.$el.html( this.template(this.model.toJSON()) );
return this;
}
});
App.Views.AddPerson = Backbone.View.extend({
el: '#addPerson',
events: {
'submit': 'submit'
},
submit: function(e) {
e.preventDefault();
var newPersonName = $(e.currentTarget).find('input[type=text]').val();
var person = new App.Models.Person({ name: newPersonName });
this.collection.add(person);
}
});
var peopleCollection = new App.Collections.People([
{
name: 'Mohit Jain',
age: 26
},
{
name: 'Taroon Tyagi',
age: 25,
occupation: 'web designer'
},
{
name: 'Rahul Narang',
age: 26,
occupation: 'Java Developer'
}
]);
var addPersonView = new App.Views.AddPerson({ collection: peopleCollection });
peopleView = new App.Views.People({ collection: peopleCollection });
$(document.body).append(peopleView.render().el);
})();