API Map Yandex: Изменение содержимого метки «на лету»
Задача: разместить внутри метки поле ввода текста (комментарий) и сохранять его значение
Решение:
При формировании Json данных FeatureCollection, внутри каждой метки, в настройке balloonContentBody разместим теги <textarea style=’width: 100%;’></textarea>. И кнопку сохранения результата. Но! Сохранить результат в БД не сложно. Сложно добиться того, чтобы то что пользователь ввел в поле, сохранилось, после перевыбора метки мышкой. Содержимое поля скидывается каждый раз к изначальному, т.к. движек яндекса каждый раз перерисовывает отображение html на основании данных которые у него » в душе». Поэтому функция сохранения будет выглядеть как-то так:
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
- Читаем данные которые яндекс хранит у себя в нутри
- Изменем эти данные, добавив комментарий
- Сохраняем данные «внутри»
В результате после перещелкивания по метке, комментарий сохраняется.