2016-07-25 3 views
0

so habe ich Probleme mit dieser Displayinfobox-Funktion. Ich habe die Bing Maps v8 API untersucht, um Ereignisse mit der Infobox zu verknüpfen. Ich folge Bing und speichere Event-Handler im Infobox-Objekt. Ich bekomme diese Leseeigenschaft 'add' Fehler.Uncaught TypeError: Kann die Eigenschaft 'add' von undefined :: javascript :: bing maps nicht lesen

In der Stacktrace, es bringt mich entweder zu der Zeile, in der ich einen Event-Handler hinzufügen, oder wenn ich überprüfe, ob Infobox irgendwelche Ereignisse daran angehängt hat.

Ich versuche, dieses Skript hier zu folgen https://blueric.wordpress.com/2011/03/10/creating-hover-style-info-boxes-on-the-bing-maps-ajax-v7-0-control/. Da es ziemlich alt ist, würde ich annehmen, dass die Dinge auf ähnliche Weise funktionieren könnten.

Edited:

Es scheint, wie es etwas mit addHandler zu tun hat, die auf verwirrt im.

function displayInfoBox(e) { 

    stopInfoBoxTimer(e); 

    console.log("after Infobox Timer"); 

    if (_displayInfoType != "INFOBOX") 
     return; 

    var replaceContent = infoboxTemplate; 
    var ticket = e.target.ticket; 
    var contentHead = "<ul>"; 
    var contentEnd = "</ul>"; 
    var content = ""; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR} + "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>"; 
    content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ "</li>"; 

    if (ticket.WW_PK != "") 
     content += "<li><b>:</b> " + ticket.{REMOVED VAR}+ ", " + ticket.{REMOVED VAR}+ "</li>"; 
    else 
     content += "<li><b>: <span style='color:red;'>{REMOVED VAR}</span></b></li>"; 


    replaceContent = replaceContent.replace('{title}', ticket.{REMOVED VAR}); 
    replaceContent = replaceContent.replace('{content}', contentHead + content + contentEnd); 

    console.log("after replaced content"); 
    var options = { 
     offset: new Microsoft.Maps.Point(23, 173), 
     location: e.target.getLocation(), 
     htmlContent: replaceContent, 
     visible: true 
    }; 

    console.log(options); 

    console.log("before removing events from infobox"); 
    if (infobox != null && infobox.mouseLeaveHandler != null && infobox.mouseEnterHandler != null) { 

     if (Microsoft.Maps.Events.hasHandler(infobox, 'mouseleave')) 
      Microsoft.Maps.Events.removeHandler(infobox.mouseLeaveHandler); 

     if (Microsoft.Maps.Events.hasHandler(infobox, 'mouseenter')) 
      Microsoft.Maps.Events.removeHandler(infobox.mouseEnterHandler); 

     infobox = null; 
    } 
    console.log("after removing events from infobox"); 
    console.log(infobox); 
    infobox = new Microsoft.Maps.Infobox(location, options); 
//-------------------------- ERROR IN HERE --------------------------------- 

    infobox.mouseLeaveHandler = Microsoft.Maps.Events.addHandler(infobox, 'mouseleave', infoBoxMouseLeave); 
    infobox.mouseEnterHandler = Microsoft.Maps.Events.addHandler(infobox, 'mouseenter', infoBoxMouseEnter); 
//-------------------------- ERROR IN HERE --------------------------------- 
    console.log(infobox.mouseEnterHandler); 
    infobox.setMap(map); 
} 

Edited (AKTUELLE): es scheint, als ob es ein Fehler mit Bing V8 ist oder einfach nur eine Änderung in der Art und Weise dieser Code verarbeitet wird. Ich habe den Großteil des Codes in ein Geigenprojekt kopiert und es funktioniert in v7 gut. Also werde ich das manuell tun.

Ich werde Arbeitscode einmal veröffentlichen, das ist abgeschlossen.

+1

Es scheint nichts mit einer 'add' Eigenschaft im gebuchten Code zu sein. – adeneo

+1

@adeneo - noch etwas, das 'add' aufruft. Ich bin verwirrt. Auch unter ERROR IN HIER gibt es 'infobox.setMap (map);' aber 'map' existiert nicht. – vlaz

+0

@adeneo Es könnte ein schlechtes Argument vom OP sein, das einen Fehler im Microsoft-Code verursacht. – gcampbell

Antwort

1

Das Problem ist, dass die Infobox Klasse nicht mouseleave oder MouseEnter- Ereignisse hat. Wenn Sie also versuchen, Ereignishandler dafür hinzuzufügen, schlägt der Teil "Hinzufügen" dieses Schritts fehl, da diese Ereignisse nicht vorhanden sind.

+0

Ja, ich habe eine Antwort darauf gepostet. Aber ich werde dich als die Antwort markieren. Würdest du zufällig wissen, wie ich diesen Effekt mit v8 erreichen kann? –

+0

Da Sie für die Infobox benutzerdefiniertes HTML verwenden, können Sie stattdessen Standard-JavaScript-Ereignisse verwenden. http://www.w3schools.com/js/js_events_examples.asp – rbrundritt

Verwandte Themen