API Map Yandex: Изменение содержимого метки «на лету»
Задача: разместить внутри метки поле ввода текста (комментарий) и сохранять его значение
Решение:
При формировании Json данных FeatureCollection, внутри каждой метки, в настройке balloonContentBody разместим теги <textarea style=’width: 100%;’></textarea>. И кнопку сохранения результата. Но! Сохранить результат в БД не сложно. Сложно добиться того, чтобы то что пользователь ввел в поле, сохранилось, после перевыбора метки мышкой. Содержимое поля скидывается каждый раз к изначальному, т.к. движек яндекса каждый раз перерисовывает отображение html на основании данных которые у него » в душе». Поэтому функция сохранения будет выглядеть как-то так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function SaveComment(ls_id){ console.log("-сохраняем комментарий "+ls_id); comment=$("#comment_"+ls_id).val(); $.post("?r=receipts2/savecomment", { ls_id:ls_id, comment:comment }).done(function(data) { console.log(data); balloonContentBody=objectManager.objects.getById(ls_id).properties.balloonContentBody; start_=balloonContentBody.slice(0,balloonContentBody.search("%;'")+4); end_=balloonContentBody.slice(balloonContentBody.search("</textarea>"),balloonContentBody.length); balloonContentBody=start_+comment+end_; objectManager.objects.setObjectProperties(ls_id,{balloonContentBody:balloonContentBody}); }); } |
Что тут происходит?
- Изменения сохраняются в базу данных при помощи вызова скрипта receipts2/savecomment
- Читаем данные которые яндекс хранит у себя в нутри
- Изменем эти данные, добавив комментарий
- Сохраняем данные «внутри»
В результате после перещелкивания по метке, комментарий сохраняется.