Маркеры Google Maps v3 API исчезают при закрытии InfoWindow (InfoBubble)

Я новичок в JavaScript и API карт Google. Я не могу понять, что не так.

InfoWindow на самом деле является классом, который я нашел «InfoBubble». http://google-maps-utility-library-v3.googlecode.com/svn/trunk/infobubble/examples/example.html/

Вот ситуация:

1. I create my map and add a 'click' event. The event creates Markers. 
2. I create one global infoWindow.
3. I click the map, a Marker appears.
4. I click the map, a Marker appears.
5. I click the map, a Marker appears. Step 3-5 can be repeated lots and lots.
6. I click marker number X 
  6.1. An infoWindow pops up.
7. I click marker number Y 
  7.1. The infoWindow is closed. (.close())
  7.2. Its content and position is changed
  7.3. It is opened on the new position (.open(map,marker))
  7.4. Also Marker number X is removed.

Попробуйте сами: http://dl.dropbox.com/u/6084360/test/index.html

Почему шаг 7.4. происходит? После того, как это произошло, я могу щелкать маркеры, но мне кажется, что ничего не исчезает. ПОЧЕМУ?

Я попытался выполнить отладку через Google Chrome, но после того, как я выполнил шаг 7.3, он привел меня к уменьшенному коду, и я заблудился.

Вот строка, которая удаляет маркер. Я понятия не имею, почему он удаляет его или как узнать, с чего начать.

R.addDomListenerOnce=function(a,b,c,d){var e=R[yc](a,b,function(){e[wb]();return c[Cc](this,arguments)},d);return e};R.R=function(a,b,c,d){c=cf(c,d);return R[yc](a,b,c)};function cf(a,b){return function(c){return b[oc](a,c,this)}}R.bind=function(a,b,c,d){return R[G](a,b,P(c,d))};R.addListenerOnce=function(a,b,c){var d=R[G](a,b,function(){d[wb]();return c[Cc](this,arguments)});return d};R.forward=function(a,b,c){return R[G](a,b,df(b,c))};R.ua=function(a,b,c,d){return R[yc](a,b,df(b,c,!d))};

Мой код:

    var times = 0;
    var treasureLocation = new google.maps.LatLng(62.05350309096103, 15.373047874999997);
    var map, infoBubble = null;

    function initialize() 
    {   
        // Create the actual map.
        map = new google.maps.Map(document.getElementById("map_canvas"), 
            {
              zoom:         4,
              center:       new google.maps.LatLng(62.05350309096103, 15.373047874999997),
              mapTypeId:    google.maps.MapTypeId.ROADMAP
            }
        );

        infoBubble = new InfoBubble({
            disableAutoPan: true
        });

        // Add an eventlistener to the map.
        google.maps.event.addListener
        (
            map, 
            'click', 
            function(ev)
            {
                addMarker(ev);
            }
        );              
    }

    function addMarker(ev)
    {
        // Get the distance.
        var distance = getDistance( ev.latLng , treasureLocation );

        // Skriv ut vart man klickade.
        document.getElementById("click_info").innerHTML = "Du klickade " + distance + " ifrån skatten, försök igen!";

        // Create a marker
        var marker = new google.maps.Marker({
            position:   ev.latLng,
            map:        map,
            clickable:  true,
            title:      "Härifån är det bara " + distance + " till skatten!",
            icon:       "shovel.png"
        });

        // Hook the click on the created marker to show the created popup
        google.maps.event.addListener
        (
            marker,
            'click',
            function(ev)
            {
                if( infoBubble != null ){infoBubble.close();}
                infoBubble.setContent(marker.title);
                infoBubble.setPosition(marker.position);
                infoBubble.open(map, marker);
            }
        );

    }

person jontelang    schedule 07.03.2012    source источник
comment
Ну, я не могу объяснить, почему, но я обнаружил, что infoBubble.setPosition(marker.position); вызывает у меня проблему. Если вы закомментируете или удалите его, первый маркер не исчезнет (также повторный щелчок по тому же самому пузырю не изменит содержимое пузырька, что тоже произошло). Ну, вы назначаете место, где он должен открываться в любом случае, используя infoBubble.open(map, marker);, так что я думаю, вам это не понадобится :) Попробуйте и дайте мне знать, если это сработало.   -  person Kedor    schedule 08.03.2012
comment
Спасибо! Я думаю, что эта строка переместила маркер на маркер второго щелчка. Я увидел один из моих маркерных текстов далеко от того места, где он должен был быть, но я просто отмахнулся от него и пошел дальше. В любом случае, спасибо! Вы должны поместить это как «ответ», чтобы я мог проголосовать и «принять», и, возможно, больше людей увидят это.   -  person jontelang    schedule 08.03.2012


Ответы (1)


Я не могу объяснить, почему, но похоже, что infoBubble.setPosition(marker.position); вызывает проблемы. Просто удалите его. Вы используете infoBubble.open(map, marker); для определения положения пузырька, поэтому вам это не нужно.

person Kedor    schedule 08.03.2012