forked from GarethElms/BackboneJSModalView
-
Notifications
You must be signed in to change notification settings - Fork 0
/
demo.js
101 lines (93 loc) · 1.86 KB
/
demo.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
PersonModel = Backbone.Model.extend(
{
initialize: function() {},
schema: {
name: { dataType: 'Text'}
}
});
PeopleCollection = Backbone.Collection.extend(
{
model: PersonModel
});
AddPersonView = ModalView.extend(
{
name: "AddPersonView",
model: PersonModel,
templateHtml:
"<form>" +
"<label for='personName'>Person's name</label>" +
"<input type='text' id='personName' />" +
+
"</form>",
initialize:
function()
{
_.bindAll( this, "render");
this.template = _.template( this.templateHtml);
},
events:
{
"submit form": "addPerson"
},
addPerson:
function( event)
{
event.preventDefault();
this.hideModal();
_people.add( new PersonModel({name: $("#personName").val()}));
},
render:
function()
{
var form = new Backbone.Form({
model: this.model
}).render();
$(this.el).html(form.el);
return this;
}
});
PersonItemView = Backbone.View.extend(
{
templateHtml:
"<span>{{name}}</span>",
tagName: "li",
initialize:
function()
{
this.template = _.template( this.templateHtml);
},
render:
function()
{
$(this.el).html( this.template( this.model.toJSON()));
return this;
}
});
PeopleListView = Backbone.View.extend(
{
initialize:
function()
{
this.collection.bind("add", this.renderNewPerson, this);
this.collection.bind("remove", this.render, this);
},
render:
function()
{
var people = [];
this.collection.each(
function( model)
{
var view = new PersonItemView( {model : model});
people.push( view.render().el);
});
$(this.el).append( people);
return this;
},
renderNewPerson:
function( personModel)
{
var html = new PersonItemView( {model : personModel}).render().el;
$(this.el).append( html);
}
});