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 に答える