Обновление свойства маркера Mapbox: почему это не работает?

Работая с 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'] каждый раз?

1 ответ

Решение

Это больше простой вопрос Javascript: объекты содержат ссылки на переменные. Если вы измените эти ссылки в объекте, они будут обновлены на месте. Если вы извлекаете переменные сами и меняете их, это не так. Пример: http://mistakes.io/

Другие вопросы по тегам