Mapbox标记属性更新:为什么这不起作用?

时间:2013-08-09 15:42:17

标签: javascript json mapbox

使用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']

1 个答案:

答案 0 :(得分:2)

这是一个基本的Javascript问题:对象包含对变量的引用。如果您在对象中更改了这些引用,那么它们就会更新到位。如果你自己提取变量并改变它们,那么它们就不是。示例:http://mistakes.io/#6220549