Клуб API Карт

Не работает функция удаления полилинии.(Код внутри)

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

 

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 myPolyline = new Array();
            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 () {Сбдапочемутокривопередаетсяобъект
                            myPolyline,
                            myMap.geoObjects.remove(myPolyline[i]);
                            //}
                        }
                    });
                    return items;
                }
            });
            myMap.geoObjects.add(myPolyline[i])
            myPolyline[i].editor.startEditing();
            //document.write(myPolyline[i]);
            //alert (myPolyline[i]);
            $("span[id='startEditPolyline']").click(
                function () {
                    //myPolyline[i].editor.startEditing();
                    document.write(myPolyline); //Здесь выдает undefined  
                });
        }
    }

 

Если вне функции вывести document.write(myPolyline) то все отлично выводится, если же в функции,то он выводит  undefined . В чем может быть загвоздка? 

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

http://jsfiddle.net/CostaConquesta/gpKYk/1/

по вашему аналогу - всё работает. В анонимной из анонимной функции алертает object Object

 

И не спамте, терпеливо ждите помощи

Williams.Smirnov
19 июня 2013, 21:19

Ну во-первых у меня с циклом) И мы обращаемся не к конкретному элементу. Вы посмотрите мой код пожалуйста. Буду очень вам благодарен.

Разобрался полностью в вашей проблеме.

Когда вы иницииируете клик на кнопку i = количество итераций +1

т.к. в js передаётся переменная ссылкой а не значением.

Необхтдимо вынести событие за цикл и в событии перебирать ваши гео-объекты

 

Williams.Smirnov
19 июня 2013, 22:05

Огромное Вам спасибо, сейчас буду пробывать.

Williams.Smirnov
19 июня 2013, 22:06

А с пункт меню в меню "удалить линию", тоже за цикл выносить?

Williams.Smirnov
19 июня 2013, 22:47

Ой, и объяснити пожалуйста,как его заного можно перебрать( Не выходит. Вынес из цикла и записал вот так 

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

                function () {

                   for (var i=0; i

  myPolyline[i].editor.startEditing();

  }

  

 });

    $("span[id='startEditPolyline']").click(
                function(){
                    for(var i=0; i                        myPolyline[i].editor.startEditing();
                    }
                });

сразу после вашего цикла

Да и зачем использовать массивы объектов, когда есть геоколекции?

Williams.Smirnov
19 июня 2013, 23:19

Спасибо) Я совсем еще новичек) Куда уж мне до геоколекций) Обязательно почитаю. Ну и еще один вопрос у меня есть))) Как быть с этим пунктом

  //Эта функция не работает

       editorMenuManager: function (items) {

            items.push({

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

                onClick: function () {

Сбда почему то криво передается объект myPolyline,                   

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

//}

}

            });

            return items;

        }

   

    });

Он ведь находится в переменной myPolyline, как ее за цикл вытащить?

И еще тот код выше работает только в одном случае из 50 маршрутов(((( Только для одного включает режим редактирования. Во всех остальных случаях  в консоле пишет Uncaught TypeError: Cannot read property 'editor' of undefined

 Там всего один объект с координатами, поэтому и работает(

 

http://jsfiddle.net/CostaConquesta/gpKYk/2/

посмотрите как я реализовал это. В записываю в локальную переменную функции объект.