diff --git a/IPython/html/static/notebook/js/widget.js b/IPython/html/static/notebook/js/widget.js index 5bfdc8dc5..8443a4f95 100644 --- a/IPython/html/static/notebook/js/widget.js +++ b/IPython/html/static/notebook/js/widget.js @@ -56,9 +56,12 @@ define(["../../components/underscore/underscore-min.js", this.save(this.changedAttributes(), {patch: true}); for (var cell_index in this.views) { - var view = this.views[cell_index]; - if (view !== caller) { - view.update(); + var views = this.views[cell_index]; + for (var view_index in views) { + var view = views[view_index]; + if (view !== caller) { + view.update(); + } } } }, @@ -177,8 +180,11 @@ define(["../../components/underscore/underscore-min.js", // Handle when a widget is closed. handle_comm_closed: function (msg) { for (var cell_index in this.views) { - var view = this.views[cell_index]; - view.remove(); + var views = this.views[cell_index]; + for (var view_index in views) { + var view = views[view_index]; + view.remove(); + } } }, @@ -187,17 +193,23 @@ define(["../../components/underscore/underscore-min.js", display_view: function (view_name, parent_comm_id, cell_index) { var view = new this.widget_view_types[view_name]({model: this}); view.render(); - this.views[cell_index] = view; + if (this.views[cell_index]==undefined) { + this.views[cell_index] = [] + } + this.views[cell_index].push(view); view.cell_index = cell_index; // Handle when the view element is remove from the page. var that = this; view.$el.on("remove", function(){ - var index = that.views.indexOf(view); + var index = that.views[cell_index].indexOf(view); if (index > -1) { - that.views.splice(index, 1); + that.views[cell_index].splice(index, 1); } view.remove(); // Clean-up view + if (that.views[cell_index].length()==0) { + delete that.views[cell_index]; + } // Close the comm if there are no views left. if (that.views.length()==0) {