##// END OF EJS Templates
Implement view logic in selection containers.
Jonathan Frederic -
Show More
@@ -359,8 +359,6 define(["widgets/js/manager",
359 359 // Callback that is called for each item added.
360 360
361 361 // Walk the lists until an unequal entry is found.
362 console.error("Deprecated _do_diff; use a ViewList or similar class instead");
363
364 362 var i;
365 363 for (i = 0; i < new_list.length; i++) {
366 364 if (i >= old_list.length || new_list[i] !== old_list[i]) {
@@ -605,7 +603,7 define(["widgets/js/manager",
605 603 // will be called in that context.
606 604
607 605 this.initialize.apply(this, arguments);
608 }
606 };
609 607
610 608 _.extend(ViewList.prototype, {
611 609 initialize: function(create_view, remove_view, context) {
@@ -661,7 +659,7 define(["widgets/js/manager",
661 659 this.state_change = this.state_change.then(function() {
662 660 for (var i = 0, len=that.views.length; i <len; i++) {
663 661 that._remove_view.call(that._handler_context, that.views[i]);
664 };
662 }
665 663 that._models = [];
666 664 that.views = [];
667 665 });
@@ -9,18 +9,23 define([
9 9 ], function(widget, utils, $){
10 10
11 11 var AccordionView = widget.DOMWidgetView.extend({
12 initialize: function(){
13 AccordionView.__super__.initialize.apply(this, arguments);
14
15 this.containers = [];
16 this.model_containers = {};
17 this.children_views = new widget.ViewList(this.add_child_model, this.remove_child_model, this);
18 this.listenTo(this.model, 'change:children', function(model, value) {
19 this.children_views.update(value);
20 }, this);
21 },
22
12 23 render: function(){
13 24 // Called when view is rendered.
14 25 var guid = 'panel-group' + utils.uuid();
15 26 this.$el
16 27 .attr('id', guid)
17 28 .addClass('panel-group');
18 this.containers = [];
19 this.model_containers = {};
20 this.update_children([], this.model.get('children'));
21 this.model.on('change:children', function(model, value, options) {
22 this.update_children(model.previous('children'), value);
23 }, this);
24 29 this.model.on('change:selected_index', function(model, value, options) {
25 30 this.update_selected_index(model.previous('selected_index'), value, options);
26 31 }, this);
@@ -31,6 +36,7 define([
31 36 this.on('displayed', function() {
32 37 this.update_titles();
33 38 }, this);
39 this.children_views.update(this.model.get('children'));
34 40 },
35 41
36 42 update_titles: function(titles) {
@@ -62,14 +68,6 define([
62 68 }
63 69 },
64 70
65 update_children: function(old_list, new_list) {
66 // Called when the children list is modified.
67 this.do_diff(old_list,
68 new_list,
69 $.proxy(this.remove_child_model, this),
70 $.proxy(this.add_child_model, this));
71 },
72
73 71 remove_child_model: function(model) {
74 72 // Called when a child is removed from children list.
75 73 var accordion_group = this.model_containers[model.id];
@@ -128,14 +126,24 define([
128 126 return view;
129 127 }, utils.reject("Couldn't add child view to box", true));
130 128 },
129
130 remove: function() {
131 AccordionView.__super__.remove.apply(this, arguments);
132 this.children_views.remove();
133 },
131 134 });
132 135
133 136
134 137 var TabView = widget.DOMWidgetView.extend({
135 138 initialize: function() {
136 139 // Public constructor.
137 this.containers = [];
138 140 TabView.__super__.initialize.apply(this, arguments);
141
142 this.containers = [];
143 this.children_views = new widget.ViewList(this.add_child_model, this.remove_child_model, this);
144 this.listenTo(this.model, 'change:children', function(model, value) {
145 this.children_views.update(value);
146 }, this);
139 147 },
140 148
141 149 render: function(){
@@ -149,11 +157,7 define([
149 157 this.$tab_contents = $('<div />', {id: uuid + 'Content'})
150 158 .addClass('tab-content')
151 159 .appendTo(this.$el);
152 this.containers = [];
153 this.update_children([], this.model.get('children'));
154 this.model.on('change:children', function(model, value, options) {
155 this.update_children(model.previous('children'), value);
156 }, this);
160 this.children_views.update(this.model.get('children'));
157 161 },
158 162
159 163 update_attr: function(name, value) {
@@ -161,14 +165,6 define([
161 165 this.$tabs.css(name, value);
162 166 },
163 167
164 update_children: function(old_list, new_list) {
165 // Called when the children list is modified.
166 this.do_diff(old_list,
167 new_list,
168 $.proxy(this.remove_child_model, this),
169 $.proxy(this.add_child_model, this));
170 },
171
172 168 remove_child_model: function(model) {
173 169 // Called when a child is removed from children list.
174 170 var view = this.pop_child_view(model);
@@ -254,6 +250,11 define([
254 250 .removeClass('active');
255 251 this.containers[index].tab('show');
256 252 },
253
254 remove: function() {
255 TabView.__super__.remove.apply(this, arguments);
256 this.children_views.remove();
257 },
257 258 });
258 259
259 260 return {
General Comments 0
You need to be logged in to leave comments. Login now