Javascript / JQuery обновление маркера Google - PullRequest
3 голосов
/ 20 июля 2011

У меня есть карта Google, в которой я отображаю маркеры из базы данных через ajax. Работает хорошо, за исключением перерисовки маркеров (старые удаляются, а новые рисуются). Данные, которые я получаю от ajax, представляют собой текстовую форму переменных, разделенных запятыми. Я пытаюсь найти эффективный способ удаления данных, которые больше не применимы, и добавления новых. Я думаю, что лучший способ справиться с этим, как только я получу данные из поста ajax, поскольку именно тогда они находятся в чистом виде, то есть до того, как они превращаются в маркеры.

Кто-нибудь делал это раньше или имеет опыт работы с is? Если бы я делал это в LINQ, я бы делал что-то, кроме двух списков данных. Я не знаю, как БЫСТРО сделать это в js, поскольку js - более медленная часть цикла.

1 Ответ

0 голосов
/ 24 июля 2011

Возможно, в вопросе недостаточно подробностей, но предполагается следующее:

  1. Ajax возвращает текст, у которого список разделенных запятыми значений уникален идентификаторы маркера.
  2. У вас есть список или массив из предыдущего вызова ajax с уникальным идентификатором маркера.
  3. Требуется удалить список маркеров и добавить еще один список маркеров.

Если это не так, то уточните вопрос, добавив детали. «До» и «После» было бы хорошо.

В противном случае такой подход должен работать:

Пример данных:

var oldMarkers      = [ "Joe's Diner", 
                        "Frank's Bail bonds", 
                        "Precinct 9", 
                        "Fence and Go"
                    ];
var newMarkerStr    = "Precinct 9, Memorial Hospital,"
                    + " Frank's Bail bonds, Mary's shyster";
//-- Split on commas; strip out boundary whitespace.
var newMarkers      = newMarkerStr.split (/(?:\s*,\s*)+(?!(?:\s*,\s*))/);  


Процесс выглядит так:

var toAdd           = newMarkers.slice ();  //-- Copy the array.

var toDelete        = $.grep (oldMarkers, function (marker) {
                        var K   = $.inArray (marker, newMarkers);
                        if (K  ==  -1) {
                            //-- Old item not in the list, delete it.
                            return true;
                        }
                        else {
                            /*-- Old item is in the new list, mark it as
                                to be removed from the "add" list.
                            */
                            toAdd[K] = -666;
                        }
                        return false;
                    } );
toAdd               = $.map (toAdd, function (marker) { 
                        return (marker == -666) ? null : marker; 
                    } );


Посмотри вживую на jsFiddle.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...