server/src/main/webapp/static/js/main_test_models.js
author ymh <ymh.work@gmail.com>
Tue, 25 Dec 2012 21:29:11 +0100
changeset 47 267d67791e05
parent 45 server/src/main/webapp/js/main_test_models.js@37c9a17c3284
permissions -rw-r--r--
first stabilization of editing a renkan. No collaborative capacities yet.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
(function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
	var root = this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
	var Backbone = root.Backbone;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
	var Rkns = root.Rkns = {};
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
	root.ModelView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
		events : {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
			"click .show_form" : "show_form",
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
			"click .remove_button" : "remove_click",
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
			this.template = _.template(options.template);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
			this.model.bind("change", this.render);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
			this.form_view = options.form_view;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
			this.form_el = options.form_el;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
			if(typeof options.getJSON === "function") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
				this.getJSON = options.getJSON;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			$(this.el).html(this.template(this.getJSON()));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		show_form: function(evt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
			if(typeof this.form_view !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
				this.form_view.render();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
				$(this.form_el).empty();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
				$(this.form_el).append(this.form_view.el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		getJSON : function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
			return this.model.toJSON();			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		remove_click : function(evt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
			var obj_id = $(evt.currentTarget).attr("value");
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
			if(typeof this.model.collection !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
				this.model.collection.remove(this.model);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
	root.ColView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
			this.element = options.element;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			this.element_form = options.element_form;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			this.element_form_el = options.element_form_el;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
			this.rendered = false;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
			var that = this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
			this.element_views = [];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
			
47
267d67791e05 first stabilization of editing a renkan.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    61
			var that = this;
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
			this.collection.each(function(elt) { 
47
267d67791e05 first stabilization of editing a renkan.
ymh <ymh.work@gmail.com>
parents: 45
diff changeset
    63
				that.add(elt); 
45
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
			this.collection.bind('add', this.add);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
			this.collection.bind('remove', this.remove);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		render : function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
			this.rendered = true;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			var that = this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			this.$el.empty();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
			_(this.element_views).each(function(dvs){
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				that.$el.append(dvs.disp.render().el);				
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
		add : function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
			var fv_args = _.extend({}, this.element_form, {model: elt});			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
			var fv = new FormView(fv_args);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
			var dv_args = _.extend({}, this.element, {model: elt, tagName: 'li', form_view: fv, form_el: this.element_form_el});			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			var dv = new ModelView(dv_args);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			this.element_views.push({disp:dv, form:fv});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			if(this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
				this.$el.append(dv.render().el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
		remove : function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
			var viewsToRemove = _(this.element_views).select(function(cvs) { return cvs.disp.model === elt; })[0];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
			this.element_views = _(this.element_views).without(viewsToRemove);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
			if(this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				viewsToRemove.disp.$el.remove();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
				viewsToRemove.form.$el.remove();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
		remove_click : function(evt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
			var obj_id = $(evt.currentTarget).attr("value");
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
			this.collection.remove(this.collection.get(obj_id));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
	root.FormView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
		events : {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			"change .form_field": "changed"
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
			this.template = _.template(options.template);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
			this.model.bind("change", this.render);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
			if(typeof options.getJSON === "function") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
				this.getJSON = options.getJSON;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
			this.$el.html(this.template(this.getJSON()));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
		changed: function(evt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
			var value = $(evt.currentTarget).val();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
			var field_name = $(evt.currentTarget).attr("name");
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
			if(this.model.get(field_name) != value) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
				this.model.set(field_name, value);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
		getJSON : function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
			return this.model.toJSON(); 
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
	root.SelectCurrentUserView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			this.rendered = false;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
			this.child_view_constructor = options.child_view_constructor;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			this.child_tag_name = options.child_tag_name;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
			this.children_views = [];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
			this.collection.each(this.add);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
			this.collection.bind('add', this.add);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
			this.collection.bind('remove', this.remove);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
		add: function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
			var child_view = new this.child_view_constructor({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
				model: elt,
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
				tagName : this.child_tag_name
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
			this.children_views.push(child_view);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
			if (this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
				this.$el.append(child_view.render().el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
		remove: function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			var view_to_remove = _(this.children_views).select(function(cv) { return cv.model === elt; })[0];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
			this.children_views = _(this.children_views).without(view_to_remove);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			if (this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
				view_to_remove.$el.remove();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
			this.rendered = true;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
			var that = this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
			this.$el.empty().html("<option value=\"\">Unknown</option>");
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
			_(this.children_views).each(function(cv){
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
				that.$el.append(cv.render().el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
	root.SelectUserView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
			this.model.bind("change", this.render);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		},		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
			this.$el.val(this.model.id).text(this.model.get("title"));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
	root.CurrentUserView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		initialize : function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
			this._select_view = new SelectCurrentUserView({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
				el : this.el,
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
				collection : this.model.get("users"),
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
				child_view_constructor: SelectUserView,
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
				child_tag_name: "option",
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
			this.$el.empty();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
			this._select_view.render();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
	root.BasicListView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
			this.element_view_constructor = options.element_view_constructor;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			if(typeof options.template !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
				this.template = _.template(options.template);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
			this.rendered = false;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
			this.element_views = [];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
			this.collection.each(this.add);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
			this.collection.bind('add', this.add);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
			this.collection.bind('remove', this.remove);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
			this.collection.bind('reset', this.reset);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
			this.collection.bind('destroy', this.destroy);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
			this.rendered = true;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
			var that = this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
			this.$el.empty();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
			if(typeof this.template !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
				var data = {};
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
				if(typeof this.model !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					data = this.$el.model.toJSON();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
				this.$el.html(this.template(data));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
			_(this.element_views).each(function(dvs){
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
				that.$el.append(dvs.render().el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		add: function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
			var element_view = new this.element_view_constructor({model: elt});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
			this.element_views.push(element_view);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
			if(this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
				this.$el.append(element_view.render().el);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
		remove: function(elt) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
			var element_view = _(this.element_views).select(function(cv) {return cv.model === elt;})[0];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			this.element_views = _(this.element_views).without(element_view);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
			if(this.rendered) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
				element_view.$el.remove();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
		reset: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
			_(this.element_views).each(function(cv) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
				cv.$el.remove();
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
			});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
			this.element_views = [];
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			this.collection.each(this.add);	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
	root.BasicModelView = Backbone.View.extend({
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
		initialize: function(options) {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
			_.bindAll(this);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			if(typeof options.template !== "undefined") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
				this.template = _.template(options.template);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
			if(typeof options.getJSON === "function") {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
				this.getJSON = options.getJSON;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
			}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
			this.model.bind("change", this.render);
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
		render: function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
			$(this.el).html(this.template(this.getJSON()));
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
			return this;
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
		},
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
		getJSON : function() {
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
			return this.model.toJSON();			
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
		}
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
	});
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
	
37c9a17c3284 - add Spring
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
}).call(this);