У меня проблема с моим кодом в Google maps API v3. Маркеры обновляются каждую минуту (или вручную в любое время). Но я не хочу стирать все маркеры, а затем снова «повторно загружать» маркеры причин, затем «мигать».Действия Javascript в объекте, когда id находится в другом массиве
У меня на нашем сайте много фильтров, которые влияют на маркеры просмотра. Поэтому один раз может быть 5000 маркеров, и после 1 секунды должно быть всего лишь 1
Но как я могу сделать это правильно? Есть моя функция «addMarker».
this.addMarker = function(id, object)
{
if(typeof object == 'undefined'){
return;
}
if(!this.markers[id])
{
object.marker = new google.maps.Marker({
position: new google.maps.LatLng(object.lat, object.lng),
icon: object.image
});
if((object.approved == "1" && MapApprovedControl.enabled) || object.approved == "0" && MapUnapprovedControl.enabled){
object.marker.setMap(this.canvas);
}
this.markers[id] = object;
}
else
{
if(this.markers[id].marker.getIcon() != object.image) {
this.markers[id].markers.setIcon(object.image);
}
if(this.markers[id].marker.getMap() == null){
this.markers[id].marker.setMap(this.canvas);
}
}
this.updated.push(id);
};
В «еще» блок я добавить индекс в массиве, так что я могу узнать, какие данные уже есть и какие маркеры отсутствуют.
this.updated = [];
this.update = function()
{
if(this.updated.length > 0)
{
$.each(this.markers, function(index)
{
var exists = false;
$.each(map.updated, function(key, value){
if(index == value){
exists = true;
return;
}
});
if(!exists){
map.markers[index].marker.setMap(null);
}
});
this.updated = [];
}
};
и когда карта обновляется этот случай:
$.getScript('/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP', function() {
map.update();
});
В этом URL просто "addMarker (..); addMarker (...);"
Но это решение неверно. Как только он работает, однажды nope - не уверен, почему: D + медленно.
Так мои вопросы это:
- Как правильно обновить маркеры?
- Во время обновления у меня есть два цикла, есть ли способ использовать фильтр массива?
Большое спасибо!
EDIT: Я изменил код, удалил бесполезность и переместил «this.updated.push (id)» после условий. Это решило проблему с тем, что иногда это сработало, а иногда и нет. Тем не менее, это остается проблемой с двумя циклами. (Я все еще думаю, что это не так)
EDIT1: ОК, по-прежнему не работает иногда ... Обычно, когда я получаю меньшее количество маркеров, чем раньше.
EDIT2: OK, сценарий (Аякса фрагмент) не загружается иногда (вероятно, кэшируется, ИДК)
EDIT3: Это, вероятно, лучший способ обновить маркеры без 2 циклов
this.update = function()
{
if(this.updated.length > 0)
{
$.each(map.markers, function(index){
if($.inArray(index, map.updated) == -1){
map.markers[index].marker.setMap(null);
}
});
this.updated = [];
}
};
Но Я до сих пор не знаю, как загрузить мой JS-файл (если есть много маркеров, поэтому скрипт просто не читает, не пишет никакой ошибки) - pfff Я не получаю его.
EDIT4: Хорошо, это, вероятно, фиксируется путем добавления этого (в АЯКС сниппета - обновление)
<script type="text/javascript">
function load_js()
{
var head= document.getElementsByTagName('head')[0];
var script= document.createElement('script');
script.type= 'text/javascript';
script.src= '/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP';
head.appendChild(script);
}
load_js();
</script>
, а также добавление "map.update();" строка после последней строки в файле/Of1dPGvNutBUMJdfGSmJKeZwWjR4MGmUVoBDhb9I/pTTegD9WefgHfx7WzNhP.
Следующая проблема заключается в: нагрузке только маркер, когда они не существует в нашей карте (эй эта тема как частный блокнот, Н)
Ok, его, вероятно, «неразрешимая», и мне нужна сила бога, чтобы быть продолжение ... НО СПАСИБО МНОГО ПОМОЧЬ ВПЕРВЫЕ! :-))