Обновление свойства маркера 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/