Клуб API Карт

removeFromMap(myMap) не срабатывает!

spiritabsolute
1 апреля 2014, 14:26

Почему то не срабатывает метод removeFromMap(myMap). Удаление меток с карты не происходит. Подскажите какую нибудь альтернативу этому методу.

Версия api 2.0. Карта добавляется вот таким образом http://jsfiddle.net/rvPrS/8/

В 73 строчке удаления не происходит. Изначально объекты на карту приходят в xml . Возможно причина в этом?

20 комментариев
Подписаться на комментарии к посту

В вашем фидле дожны быть заполнены все окна.

Нужно создать контейнер карты в окне html,

Нужно прописать ему стили в окне css

И нужно чтобы в окне result отобразилась карта с которой у вас что-то не удаляется.

 

В данном виде этот код ничем не помогает в понимании того что у вас не работает.

http://jsfiddle.net/rvPrS/8/ По клику на интернет магазин, срабатывает строчка кода objects.remove(shownObjects).removeFromMap(myMap);, которая должна удалить объекты, которые не вошли в результат поиска. Но этого не происходит, удаление меток с карты не происходит.

видимо если ваш код должен отработать по window.onload, то писать это в коде уже не нужно

спасибо, карта появилась!

Что должен делать этот кусок кода?

 

ymaps.geoXml.load('http://map.nameshell.ru/ymapsml.php?' + abr.getTime())
        .then(function (res) {              var objects = ymaps.geoQuery(res.geoObjects);            shownObjects = objects.search('properties.metaDataProperty.AnyMetaData.phone == "+7 (812) 490-66-70"');            objects.remove(shownObjects).removeFromMap(myMap);            shownObjects = objects.addToMap(myMap);        }, function (error){            alert('Ошибка: ' + error);                 });    });

 

в частности, что должно произойти при вызове

 objects.remove(shownObjects).removeFromMap(myMap);

 

Эта часть кода, должна получить объекты из xml , провести по ним поиск, и в частности эта строчка objects.remove(shownObjects).removeFromMap(myMap); должна удалить все объекты с карты, а потом добавить только объекты которые были найдены в результате поиска. 

точнее именно этот вариант строчки, он как бы удаляет только те объекты которые не попали вр езультат поиска, но по сути нужен вариант objects.removeFromMap(myMap); полного удаления, а потом уже добавления результата.

Во-первых вы загружаете при каждом клике на ссылку одно и тоже каждый раз

Во-вторых когда объекты загружаются вы делаете каждый раз

var objects = ymaps.geoQuery(res.geoObjects);

соответственно что-либо удалить тут не получится т.к. удаление происходит по ссылке на объект, а у вас создалась новая выборка с новыми объектами, пусть даже с теми же данными и координатами, но это совершенно другие объекты.

в-третьих строчка

objects.remove(shownObjects).removeFromMap(myMap);

не удаляет ничего из objects, а лишь создает новую выборку

чтобы получить нужный результат надо сохранить ее в туже переменную

objects = objects.remove(shownObjects).removeFromMap(myMap);


спасибо большое, благодаря этому получилось сделать самую рабочую версию! :) http://jsfiddle.net/rvPrS/11/ только все равно удаления не происходит, я сделал как вы говорили присвоил objects = objects.remove(shownObjects).removeFromMap(myMap); но все равно удаления не происходит! но зато стало видно, что метка которая удовлетворяет результату поиска не появлется вновь, а только остальные удаляются и добавляются вновь

Вам нужно загружать ваши объекты только при первом клике. 

В дальнейшем работать уже с загруженными данными (удалять/добавлять)

Каждый раз загружая теже самые данные, вы получаете совершенно новые объекты, пусть и с теми же самыми св-вами и координатами. Поэтому удаление не будет работать

В общем я не много продвинулся! http://jsfiddle.net/rvPrS/9/

Я сделал добавление начальных меток на карту через коллекцию! И потом удаляя коллекцию строкой myCollection.removeAll(); 49 строка метки стали удаляться. НО, я не смог разобраться какой нужно указать синтаксис, чтобы в 50 строке заменить вот эту запись shownObjects = objects.addToMap(myMap); на добавление сначала этих данных в коллекцию, а уже потом добавление их на карту, подскажите синтаксис этого действия.

И возникла следующая проблема, что в этом результате, все метки карты... то есть поиск в строке shownObjects = objects.search('properties.metaDataProperty.AnyMetaData.phone == "+7 (812) 490-66-70"'); не отработал.... он получил все результаты выборки, хотя с таким номером телефона только 1 метка ! :( 

Почему вот в этом варианте http://jsfiddle.net/rvPrS/10/ не работает строка 50 и 51?

geoQueryResult нельзя добавить в коллекцию

туда можно добавить только геообъекты

 

Проблема в том что вы пытаетесь разрабатывать по примерам, копируя куски кода, и не понимая что они делают.

Рекомендую вдумчиво читать документацию на каждый используемый метод и класс.

 

Часы сиденья дали свой результат! :) Вот нужный вариант работы http://jsfiddle.net/rvPrS/12/

mari-na-bzzz Спасибо!

ура)

к сожалению не ура! :(

срабатывает то оно только 1 раз... :( http://jsfiddle.net/rvPrS/13/ то есть срабатывает только первый клик на любом статусе, например жмешь интернет магазин, оно сработало как надо, а дальше уже все сбой идет...

кнопочек же у меня 5, то есть по клику на каждую нужно чтобы старые метки по предыдущему клику удалялись с карты... и добавлялись опять стандартные которые вначале при инитиализации карты приходят... 

я уже запутался сам во всем этом, перебробовал куча способов и ничего не получается :( причем в каждом способе почти получается, и потом бац запинка на каком нибудь вот таком моменте... уже начинаю думать не обойти ли весь этот ужас, через отправку гет данных в мой php 

Я вам уже писал что ужас тут это ваш подход к разработке.

Не пишут сложных приложений вот так на три экрана кода внутри одной функции.

Нужно использовать ООП, как минимум, и MVC было бы неплохо.

Хотя если вы и на PHP так пишете, то тут куда не переноси – не поможет

все! вот теперь ура!!! :) сделал просто через отправку гет данных в аякс