Внезапно потребовалось выводить на странице виджет Яндекс.Карт с какими-то накладываемыми слоями. Проблема заключалась в необходимости дать пользователю редактировать эти слои.
Быстрый поиск редакторов накладываемых примитивов дал только конструктор схем проезда от Яндекса и какой-то убогий php'шный конструктор карт (к тому же ещё и платный). А редактор был нужен. По этому пришлось сесть и быстренько написать.
Соответственно, делюсь кодом, на случай, если у кого возникнет такая же проблема. Код, как всегда, непричёсан и прекрасно документирован на С.
Есть приложение, карта и контрол. onAddToMap — часть интерфейса между картой и контролом, о чём внешнее приложение не должно знать. Формально ничего не сломается, если вызывать onAddToMap напрямую, однако это нарушает принцип инкапсуляции.
Кстати, вы так и не привели пример из документации, где onAddToMap используется напрямую.
Да ну? Если нужно было спрятать реализацию воспользовались б паттерном обработчика событий, вызывающегося из контекста map (без передачи map в явном виде). А так выглядит как запроектированный интерфейс для добавления одного и того же контрола к разным картам.
Кстати, вы так и не привели пример из документации, где onAddToMap используется напрямую.
внимательно смотрим на мой ответ:
Пример выше взят, можно сказать, непосредственно из документации
Дело, конечно, ваше: следовать рекомендациям разработчиков API (twirl-team), или нет. Правда, непонятно, почему остальные контролы у вас подключаются через map.addControl? Если уж вы раздаёте свой код, приведите его к консистентному виду.
Чтобы привести его к нормальному виду нужно предпринять несколько шагов: сделать конструкторы всех необходимых элементов DOM внутри скрипта, вынести стили, назначить нормальное именование классов, вынести resource bundle для локализации, оформить лицензионное соглашение (предварительно слинковав с лицензией яндекса) и т.д.
Вы уверены, что я должен тратить своё рабочее время, чтобы замутить полноценный open-source проект? В посте нигде не сказано, что я предлагаю готовый продукт, а не полуфабрикат на тему "возьмите и допилите под себя". Тем более прямо сказано:
Код, как всегда, непричёсан и прекрасно документирован на С.
if (confirm('сохранить слой "' + name + '"?')) { var layer = context.exportLayer(name); var out = JSON.stringify(layer); //TODO//////////////////////////////////////////// //TODO// place you storing procedure here: YMaps.jQuery("#tools .layerContent").val(out); alert(out); //TODO//////////////////////////////////////////// //TODO// as sample: adding layer to layer viewer: layers.add(layer); layers.showLayerList(); }
я так понял надо вот этот кусок смотреть.
как вывести out в textarea например?
у меня появляется вопрос "сохранить слой ... ?", нажимаю ДА, после этого появляется еще одно уведомление "undefined". слой появляется сверху в предпросмотре.