2013-08-09 6 views
0

Работа с API-интерфейсом Mapbox и интересно, почему свойства маркера, кэшированные в переменных, не обновляются, но их не кэшированные копии делают.Обновление свойства маркера: почему это не работает?

Например, это обновление маркера пользовательского 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'] каждый раз?

+0

Извините, что не могу помочь, но спасибо, что представил меня в mapbox - выглядит как классный материал – sgroves

+0

Это действительно потрясающе, в полном смысле. Рад, что вы включили его! – Jon

ответ

2

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

+0

Спасибо! Это шокирует/стыдно, что я не сталкивался с этим раньше. Время пылать текст «Хорошие детали», который я откладывал навсегда :) – Jon