1

内にグラフを描画しようとしていますinfowindowが、flotが実行されておらず、エラーもスローされていません。私はflotフォーラムで、プレースホルダー要素が表示されている必要があるため、このようなことを行うのに苦労することがよくあることを読みました(これはここでは赤ニシンかもしれません)。

別の要素で適切にグラフを作成するために、次の情報を取得できます。

$.plot(
    $("#placeholder"),
    [ f_data[loc] ],
    {
        grid: { hoverable: true, clickable: true },
        series: {
           bars: { show: true },
           clickable:true,
           color:'#3FA9F5',
           shadowSize: 0
       },//series
       xaxis: {
           tickDecimals:0,
           tickSize:1
       }//xaxis
    }
);//$.plot

しかし、上記をに入れたり、から参照したりすると、google.maps.event.addListener()何も実行されません(<canvas>要素を追加することすらできません)。

の後infowindow.open(map,marker);に配置するようにしたので、プレースホルダー要素が表示されているように見えます。#placeholderまた、実体/定義された寸法があることを確認しました。

PS私はMikeWilliamsonがGoogleMapsV3の最終的な解決策として報告したものを試しました:AJAXを介したinfowindowコンテンツのロードですが、それも機能しませんでした。

EDIT
情報ウィンドウの外部で機能するflotの例:index2.html情報
ウィンドウの内部で機能しないflotの例(addListener'domready'):index3.html情報
ウィンドウの 内部で機能しないflotの例(setTimeout):index4.html

4

2 に答える 2

2

問題は、コンテンツdivがまだドメインにアタッチされていないことです(したがって、$( "#placeholer")はそれを見つけることができません)。グラフをプロットするコードを実行する前に、infowindow domreadyイベントが発生するのを待つ必要があります。たとえば、次のようになります。

更新:以下のコードはローカルコピーで機能します(cssを変更しましたが、それが必要だったとは思いません)。

google.maps.event.addListener(marker, 'click', (function(marker, locale, s, flot_data) {
  return function() {
    var fname = 'http://clients.frende.me/incognito/images/'+date+'_'+locale.toLowerCase().replace(/\s/g,'')+'.svg';
    infowindow.setContent('<div id="gMaps_infowindow"><h3>'+locale+' ('+hour+':00): $'+s.total+'</h3><div id="flotIW" style="height:200px; width:350px;" name="'+locale+'"></div></div>');

  google.maps.event.addListener(infowindow, 'domready', function() {(function(f_data,loc) {
    $.plot(
      $("#flotIW"),
      [ f_data[loc] ],
      {
        grid: { hoverable: true, clickable: true },
        series: {
          bars: { show: true },
          clickable:true,
          color:'#3FA9F5',
          shadowSize: 0
        },//series
      xaxis: {
        tickDecimals:0,
        tickSize:1
      }//xaxis
    }
  );//$.plot
  })(flot_data,locale)});

    infowindow.open(map, marker);
    //open_popUp(flot_data,locale);
    //open_drawGraph(locale);
  }//return
})(marker, locale, s, flot_data));//google.maps.event.addListener

(別のオプションは、ドメインノードを直接作成し、それを使用してグラフをレンダリングし、それをsetContent呼び出し(文字列またはDOMノードのいずれかを取る)に渡すことです。

于 2012-09-30T22:28:33.800 に答える
0

で包ん$.plotでみましたsetTimeout(function(){$.plot({stuff})}, 0)か?

これは、ブラウザが実行する前に必要な要素の描画を完了する時間を与えるのに役立つ場合があります。

これが役立つ理由については、こちらをご覧ください。setTimeout(fn、0)が役立つことがあるのはなぜですか。

于 2012-09-30T21:16:24.813 に答える