From b6a0f60d3f3187b8a7e1a8a39b01439ad05e60f5 Mon Sep 17 00:00:00 2001 From: Sylvain Corlay Date: Fri, 26 Sep 2014 01:50:04 +0000 Subject: [PATCH 1/2] Make Widget.views be an object indexed by view id --- IPython/html/static/widgets/js/widget.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/IPython/html/static/widgets/js/widget.js b/IPython/html/static/widgets/js/widget.js index 4345a411f..b19976b36 100644 --- a/IPython/html/static/widgets/js/widget.js +++ b/IPython/html/static/widgets/js/widget.js @@ -26,7 +26,7 @@ define(["widgets/js/manager", this.msg_buffer = null; this.state_lock = null; this.id = model_id; - this.views = []; + this.views = {}; if (comm !== undefined) { // Remember comm associated with the model. @@ -57,9 +57,9 @@ define(["widgets/js/manager", delete this.comm.model; // Delete ref so GC will collect widget model. delete this.comm; delete this.model_id; // Delete id from model so widget manager cleans up. - _.each(this.views, function(view, i) { - view.remove(); - }); + for (var id in this.views) { + this.views[id].remove(); + } }, _handle_comm_msg: function (msg) { @@ -293,8 +293,8 @@ define(["widgets/js/manager", this.options = parameters.options; this.child_model_views = {}; this.child_views = {}; - this.model.views.push(this); this.id = this.id || IPython.utils.uuid(); + this.model.views[this.id] = this; this.on('displayed', function() { this.is_displayed = true; }, this); @@ -339,7 +339,7 @@ define(["widgets/js/manager", var view = this.child_views[view_id]; delete this.child_views[view_id]; view_ids.splice(0,1); - child_model.views.pop(view); + delete child_model.views[view_id]; // Remove the view list specific to this model if it is empty. if (view_ids.length === 0) { From 60925f0a1abb4fa732129b19f3ae3891d4820ae4 Mon Sep 17 00:00:00 2001 From: "sylvain.corlay" Date: Sun, 28 Sep 2014 23:40:27 -0400 Subject: [PATCH 2/2] hasOwnProperty --- IPython/html/static/widgets/js/widget.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/IPython/html/static/widgets/js/widget.js b/IPython/html/static/widgets/js/widget.js index b19976b36..e2f1bed73 100644 --- a/IPython/html/static/widgets/js/widget.js +++ b/IPython/html/static/widgets/js/widget.js @@ -58,7 +58,9 @@ define(["widgets/js/manager", delete this.comm; delete this.model_id; // Delete id from model so widget manager cleans up. for (var id in this.views) { - this.views[id].remove(); + if (this.views.hasOwnProperty(id)) { + this.views[id].remove(); + } } },