diff --git a/IPython/html/static/widgets/js/manager.js b/IPython/html/static/widgets/js/manager.js
index 7f3f70e..e98a350 100644
--- a/IPython/html/static/widgets/js/manager.js
+++ b/IPython/html/static/widgets/js/manager.js
@@ -93,7 +93,12 @@ define([
WidgetManager.prototype.create_view = function(model, options) {
// Creates a promise for a view of a given model
- return utils.load_class(model.get('_view_name'), model.get('_view_module'),
+
+ // Make sure the view creation is not out of order with
+ // any state updates.
+ model.state_change = model.state_change.then(function() {
+ console.log('create_view ' + model.id);
+ return utils.load_class(model.get('_view_name'), model.get('_view_module'),
WidgetManager._view_types).then(function(ViewType) {
// If a view is passed into the method, use that view's cell as
@@ -109,6 +114,8 @@ define([
view.render();
return view;
}, utils.reject("Couldn't create a view for model id '" + String(model.id) + "'"));
+ });
+ return model.state_change;
};
WidgetManager.prototype.get_msg_cell = function (msg_id) {
diff --git a/IPython/html/static/widgets/js/widget.js b/IPython/html/static/widgets/js/widget.js
index 9d98bed..42ea44f 100644
--- a/IPython/html/static/widgets/js/widget.js
+++ b/IPython/html/static/widgets/js/widget.js
@@ -81,9 +81,8 @@ define(["widgets/js/manager",
this.trigger('msg:custom', msg.content.data.content);
break;
case 'display':
- this.state_change = this.state_change.then(function () {
- return that.widget_manager.display_view(msg, that);
- }).catch(utils.reject("Couldn't process display msg for model id '" + String(that.id) + "'", true));
+ that.widget_manager.display_view(msg, that)
+ .catch(utils.reject("Couldn't process display msg for model id '" + String(that.id) + "'", true));
break;
}
},
@@ -94,6 +93,8 @@ define(["widgets/js/manager",
return this._unpack_models(state).then(function(state) {
that.state_lock = state;
try {
+ console.log('set_state ' + that.id);
+ console.log(state);
WidgetModel.__super__.set.call(that, state);
} finally {
that.state_lock = null;