Клуб API Карт

Помогите разобраться.

Williams.Smirnov
19 июня 2013, 16:57

 

//Функция обработки XML

function onGeoXmlLoad(res) {

    // myMap.geoObjects.add(res.geoObjects);

    if (res.mapState) {

        //res.mapState.applyToMap(myMap);

        //Переносим всю коллекцию в массив

        var itemss = [];

        res.geoObjects.each(function (item) {

            itemss.push(item);

        })

        //Вывод полученных координат

        for (var i = 0; i < itemss.length; i++) {

 

            var victor = res.geoObjects.get(i).geometry.getCoordinates();

 

            var myPolyline = new Array();

            myPolyline[i] = new ymaps.Polyline(victor, {}, {

                // Задаем опции геообъекта.

                // Цвет с прозрачностью.

                strokeColor: "#0066ffff",

                // Ширину линии.

                strokeWidth: 4,

                // Максимально допустимое количество вершин в ломаной.

                editorMaxPoints: 500,

                // Добавляем в контекстное меню новый пункт, позволяющий удалить ломаную.

                editorMenuManager: function (items) {

                    items.push({

                        title: "Удалить линию",

                        onClick: function () {

                            myMap.geoObjects.remove(myPolyline[i]);

                        }

                    });

                    return items;

                }

 

            });

            myMap.geoObjects.add(myPolyline[i]);

            //myPolyline[i].editor.startEditing();

            alert(myPolyline[i]);

            $("span[id='startEditPolyline']").click(

 

                function () {

 

                    myPolyline[i].editor.startEditing();

                    alert(myPolyline[i]); //Здесь выдает undefined  

 

                });

        }

 

    }

 

    //Нажимаем для редактирования полилинии

    /* $("span[id='startEditPolyline']").click(

                function () {

                   

  myPolyline.editor.startEditing();

  

 });*/

    $("span[id='stopEditPolyline']").click(

        function () {

 

            myPolyline.editor.stopEditing();

            alert("Линия успешно сохранена :)");

        });

}

 

 Короче не работет функция редактирования геолинии. myPolyline[i].editor.startEditing(); (возвращает результат

Uncaught TypeError: Cannot read property 'editor' of undefined, я так понимаю не видит массив из-за функции или что. Заранее спасибо за помощь.

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

Не могу уловить вашу логику:

 

var victor = res.geoObjects.get(i).geometry.getCoordinates();

Вы утверждаете, что в функцию входят обработанные xml данные, но обращаетесь уже как с гео-объектами

 

 

Williams.Smirnov
19 июня 2013, 20:52

Радотает все верно, но Как раз таки насчет функции для удаления линии

editorMenuManager: function (items) {

            items.push({

                title: "Удалить линию",

                onClick: function () {

                    myMap.geoObjects.remove(myPolyline[i]);

                }

            });

            return items;

        }

Здесь myPolyline[i] почему-то undefined - не определена, но почему если за пределами функции работать с эти массивом, то все прекрасно( Мне кажется я что-то не передаю в эту функцию?

 

Мне кажется я что-то не передаю в эту функцию?

Не стоит писать на javascript как на php

оnClick не случится синхронно и индекс i в обработчике клика будет равен последнему элементу массива.

Почитайте про замыкания чтоли