2

現在、ユーザーがマップ画面の位置マーカーをクリックすると、サーバーから追加情報を取得するためにページ メソッドが呼び出されます。page メソッドが成功すると、その結果を使用して、マップに表示される infoWindow のコンテンツが定義されます。ページ メソッドが遅い状況では、infoWindow をすぐに表示する必要がありますが、読み込みインジケータが表示されます。page メソッドが成功すると、infowWindow の内容が更新されます。

これまでのところ、私の素朴なアプローチは、最初に読み込みインジケーターを使用して infoWindow を作成し、この初期 infoWindow を open(map) の呼び出しで表示し、ページ メソッドが成功した後にその infoWindow の内容を更新するというものでした。ただし、ページ メソッドが完了するまでマップ キャンバスが更新されないため、このアプローチは機能しません (したがって、infoWindow の初期バージョンは表示されません)。

----- ページコード -----

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3.8&client=MY_CLIENT&sensor=false"></script>

<script type="text/javascript">

   function initialize_map() {
      map = new google.maps.Map(...);
      // set remaining map properties...
   }

   window.onload = function () {
      initialize_map();
   }

   function DrawPoint(loc) {
      var marker = GetPointMarker(loc);
      // set remaining point marker properties...
      marker.setMap(map);

      var showPointInfo = function (evt) {
         var infoWindow = infowindowList[loc];
         if (infoWindow == undefined)
         {
            GetPointInfoStart(loc);
            GetPointInfo(loc);
         }
      };

      google.maps.event.addListener(marker, 'click', showPointInfo);   
   }

   function GetPointInfoStart(loc)
   {
      var infoWindow = new google.maps.InfoWindow();
      var content = // initial content with loading indicator
      infoWindow.setContent(content);
      // set remaining infoWindow properties...
      infoWindow.open(map);
   }

   function GetPointInfo(loc)
   {
      // call page method to retrieve data for infoWindow
      PageMethods.GetMapPointInfo(..., OnGetPointInfoSuccess, OnFailure);
   }

   function OnGetPointInfoSuccess(result) {
      eval(result);
      var infoWindow = infowindowList[loc];
      var content = // final content with retrieved data
      infoWindow.setContent(content);
   }

</script>

----- コードビハインド -----

protected override void OnInit(EventArgs e)
{
   ScriptManager.GetCurrent(this).EnablePageMethods = true;
   ...
   base.OnInit(e);
}

[WebMethod]
public static string GetMapPointInfo(...)
{
   // retrieve point information from server...
   return jsonString;
}
4

1 に答える 1

0

初期コンテンツの定義方法にバグが見つかりました。コンテンツが正しく定義されるようになったため、(上記の) アプローチが機能するようになりました。

于 2012-06-12T14:57:56.360 に答える