Skip to content

Commit ad1a67c

Browse files
committed
Merge pull request #49 from SylvainCorlay/widget_persistence
Fix nested widgets persistence
2 parents 9e5541e + 1abb969 commit ad1a67c

File tree

2 files changed

+25
-13
lines changed

2 files changed

+25
-13
lines changed

ipywidgets/static/widgets/js/manager.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,10 @@ define([
438438

439439
model.set_comm_live(false);
440440
var view_promise = Promise.resolve().then(function() {
441-
return model.set_state(state[model.id].state);
441+
var deserialized = model._deserialize_state(state[model.id].state);
442+
return utils.resolve_promises_dict(deserialized);
443+
}).then(function(deserialized) {
444+
model.set_state(deserialized);
442445
}).then(function() {
443446
model.request_state().then(function() {
444447
model.set_comm_live(true);

ipywidgets/static/widgets/js/widget.js

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,25 @@ define(["nbextensions/widgets/widgets/js/manager",
162162
this.trigger('comm:close');
163163
this.close(true);
164164
},
165-
165+
_deserialize_state: function(state) {
166+
/**
167+
* Deserialize fields that have a custom serializer.
168+
*/
169+
var serializers = this.constructor.serializers;
170+
if (serializers) {
171+
var deserialized = {};
172+
for (var k in state) {
173+
if (serializers[k] && serializers[k].deserialize) {
174+
deserialized[k] = (serializers[k].deserialize)(state[k], this);
175+
} else {
176+
deserialized[k] = state[k];
177+
}
178+
}
179+
return deserialized;
180+
} else {
181+
return state;
182+
}
183+
},
166184
_handle_comm_msg: function (msg) {
167185
/**
168186
* Handle incoming comm msg.
@@ -180,16 +198,7 @@ define(["nbextensions/widgets/widgets/js/manager",
180198
for (var i=0; i<buffer_keys.length; i++) {
181199
state[buffer_keys[i]] = buffers[i];
182200
}
183-
184-
// deserialize fields that have custom deserializers
185-
var serializers = that.constructor.serializers;
186-
if (serializers) {
187-
for (var k in state) {
188-
if (serializers[k] && serializers[k].deserialize) {
189-
state[k] = (serializers[k].deserialize)(state[k], that);
190-
}
191-
}
192-
}
201+
state = that._deserialize_state(state);
193202
return utils.resolve_promises_dict(state);
194203
}).then(function(state) {
195204
return that.set_state(state);
@@ -435,7 +444,7 @@ define(["nbextensions/widgets/widgets/js/manager",
435444
* Serialize the model. See the types.js deserialization function
436445
* and the kernel-side serializer/deserializer
437446
*/
438-
return "IPY_MODEL_"+this.id;
447+
return "IPY_MODEL_" + this.id;
439448
}
440449
});
441450
widgetmanager.WidgetManager.register_widget_model('WidgetModel', WidgetModel);

0 commit comments

Comments
 (0)