0

私は次のコードを持っていますが、これを読んだら、getJSON呼び出しが非同期であるため、機能しないことを理解しています。MarkerClusterer関数がマーカーのフルセットでトリガーされるように、これを変更するにはどうすればよいですか?MarkerClusterer関数をgetJSON呼び出し内に配置しようとしましたが、うまくいきませんでした...

var mcOptions = {gridSize: 50, maxZoom: 9};
var markers = [];

function parse_json(json) {
  if (json.length > 0) {
    for (i=0; i<json.length; i++) {
        var report = json[i];  
        var latLng = new google.maps.LatLng(report.latitude, report.longitude);
        markers[i] = new google.maps.Marker({
            position: latLng, 
            title: report.name + ' ' + report.surf_size_ft_round, 
            url: "/place/"+report.slug 
        });                     

        google.maps.event.addListener(markers[i], 'click', function() {
          window.location.href = markers[i].url;
        }); 
        markers.push(markers[i]);
    }
  } 
}; 


$.getJSON('<%= request.fullpath + ".json" %>', function(stream) {   
if (stream.length > 0) {
  parse_json(stream);
  alert(markers[1].title);  //sanity check - gives result
  }
});   


    alert(markers[5].title);  // sanity check - empty 
var mc = new MarkerClusterer(map, markers, mcOptions);
4

2 に答える 2

1

このコードスニペットを入れてみませんか:

mc = new MarkerClusterer(map, markers, mcOptions);

$ .getJSONの匿名コールバック関数内?var mc;$ .getJSONスコープ外のどこかで宣言するだけで、他の場所でアクセスできるようになります。

または、関数の最後でparse_jsonイベントを発生させ、そのイベントをリッスンしてから、イベントの発生時にMarkerClustererオブジェクトを作成する別の関数を起動することもできます。これをチェックしてください:JavaScriptでイベントをトリガーする方法は?

編集:

コードをもう少し詳しく調べると、markers [i]を新しいMarkerインスタンスに設定してから、同じインスタンスのmarkers配列にプッシュしていることがわかります。おそらく、markers [i]を新しいMarkerインスタンスvar markerに設定するか、を作成して新しいMarkerインスタンスに設定してから、markers配列をプッシュする必要があります。

于 2012-10-10T09:20:58.040 に答える
1

$ .getJSONへの入力として指定するsuccess関数内に配置する必要があるかもしれませんか?

$.getJSON('<%= request.fullpath + ".json" %>', function(stream) {   
    if (stream.length > 0) {
    parse_json(stream);
    alert(markers[1].title);  //sanity check - gives result
    mc = new MarkerClusterer(map, markers, mcOptions);
  }
});   

alert(markers[5].title);  // sanity check - empty 
于 2012-10-10T09:21:28.440 に答える