0

使用 Mapbox JS API 并想知道为什么缓存在变量中的标记属性不会更新,但它们的非缓存对应物会更新。

例如,这将按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']每次都更新?

4

1 回答 1

2

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

于 2013-08-13T12:20:21.633 回答