使用Mapbox JS API,我想知道为什么缓存在变量中的Marker属性不会更新,但是它们的非缓存对应物会更新。
例如,这将按预期更新标记的自定义state
属性(在其他地方的geoJSON对象中定义):
map.markerLayer.on('click',function(e) {
var marker = e.layer;
var properties = marker.feature.properties;
var id = properties.id;
var state = properties.state;
if (state === 'active') {
panels.hidePanel(id, function(){
e.layer.feature.properties['state'] = 'inactive';
});
} else {
panels.showPanel(id, function(){
e.layer.feature.properties['state'] = 'active';
});
}
});
但这不是:
map.markerLayer.on('click',function(e) {
var marker = e.layer;
var properties = marker.feature.properties;
var id = properties.id;
var state = properties['panel-state'];
if (state === 'active') {
panels.hidePanel(id, function(){
state = 'inactive';
});
} else {
panels.showPanel(id, function(){
state = 'active';
});
}
});
任何人都可以帮助我了解后者发生了什么吗?为什么我不能在变量中缓存引用而不是每次更新e.layer.feature.properties['state']
?
答案 0 :(得分:2)
这是一个基本的Javascript问题:对象包含对变量的引用。如果您在对象中更改了这些引用,那么它们就会更新到位。如果你自己提取变量并改变它们,那么它们就不是。示例:http://mistakes.io/#6220549