似乎用这段代码:
var map = null;
map = new Datamap({
// Conf 1 ...
});
// Draw map on DOM
// Remove map from DOM and recreate another map
map = null;
map = new Datamap({
// Conf 2 ...
});
在第二次分配map
之后,生成的数据图是Conf 1
和Conf 2
的混合。
怎么会发生这种情况?
这是一个现场演示:https://jsfiddle.net/mztyLh66/7/
答案 0 :(得分:1)
问题是由于defaults的数据图实现。
在代码行中:
if (obj[prop] == null) obj[prop] = source[prop];
obj[prop]
是指向source[prop]
的指针,这导致new Datamap()
的不同实例之间的共享内存状态。
我使用深层副本解决了这个问题:
// Deep copy if property not set
if (obj[prop] == null) {
if (typeof source[prop] == 'function') {
obj[prop] = source[prop].bind({});
}
else {
obj[prop] = JSON.parse(JSON.stringify(source[prop]));
}
}
并打开pull request来修复它。