2016-07-25 6 views
0

このdisplayinfobox関数に問題があります。私はBing Maps v8 APIを使って、イベントをInfoboxにリンクしようとしていました。私はBingに従い、インフォボックスオブジェクトにイベントハンドラを格納しています。この読み込みプロパティに「追加」エラーが表示されます。Uncaught TypeError:undefined :: javascript :: bingマップのプロパティ 'add'を読み取れません

stacktraceでは、イベントハンドラを追加している行か、infoboxにイベントが接続されているかどうかを確認しているときのどちらかに移動しています。

私はここでこのスクリプトに従おうとしていますhttps://blueric.wordpress.com/2011/03/10/creating-hover-style-info-boxes-on-the-bing-maps-ajax-v7-0-control/。それはかなり古く、私は物事は同様の方法で動作するかもしれないと仮定します。

編集:

それは上の混乱イムはaddHandlerとは何かを持っているように思えます。

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); 
} 

編集(LATEST):ビングV8またはこのコードが処理される方法で、ちょうど変更にバグがあるようにそれはそう。私はコードの大部分をバイリンガルのプロジェクトにコピーし、v7で正常に動作します。だから私は手動でこれを行うつもりです。

作業コードを1回転記します。これは完了です。

+1

投稿コードに 'add'プロパティがないようですね。 – adeneo

+1

@adeneo - 'add 'を呼び出すものもありません。よくわかりません。また、ERROR IN HEREには 'infobox.setMap(map);がありますが、' map'は存在しません。 – vlaz

+0

@adeneoこれは、Microsoftコードでエラーを投げるOPの悪い引数かもしれません。 – gcampbell

答えて

1

問題は、インフォボックスクラスはmouseleaveかのMouseEnterイベントを持っていないということです。そのため、イベントハンドラを追加しようとすると、これらのイベントが存在しないため、このステップの「追加」部分が失敗します。

+0

私はそれで答えを掲載しました。しかし、私はあなたの答えを記入します。あなたはv8でどのようにその効果を達成できるか知っていますか? –

+0

infoboxにカスタムHTMLを使用しているので、代わりに標準のJavaScriptイベントを使用できます。 http://www.w3schools.com/js/js_events_examples.asp – rbrundritt

関連する問題