0

私はここで新しいので、少し質問があります...まあ、これの何が問題なのか正確にはわかりません。手がかりを教えていただければ幸いです。退屈しないといいのですが、始めましょう。

プロトタイプの「クラス メソッド」を作成しました ( thisを使用)。それは完全に機能します。

次に、このように GoogleMap の「クラス」のコーディングを開始しました

var map = Class.extend({

init: function(){
    this.mystyles = [
    {
        featureType: "all",
        elementType: "labels",
        stylers: [
        {
            visibility: "off"
        }
        ]
    }
    ];
    this.myoptions= {
        zoom: 12,
        disableDefaultUI: true,
        center: new google.maps.LatLng(10.24462, -67.59374199999999),
        mapTypeId: google.maps.MapTypeId.ROADMAP,
        styles: this.mystyles
    }
    this.markerSucursal = new Array();
    this.infoWindow = new Array();
},

initializeMap: function(divElemento){
    this.objMap = new google.maps.Map(divElemento,this.myoptions);

},

preloadMarkers: function(jsonArray){

    for(var k in jsonArray) {
        var localizacion= new google.maps.LatLng(jsonArray[k].coordenada_x,jsonArray[k].coordenada_y);
        var marker= new google.maps.Marker({
            position: localizacion,
            map: this.objMap
        })
        this.markerSucursal[k] = marker;
    }
},

createDialogs: function(jsonArray){        
    for(var k in jsonArray) {
        var marker = this.markerSucursal[k];
        var contentDialog = "<div><p><strong>Testing testing</strong></p></div>"
        var infowindow = new google.maps.InfoWindow({
            content : contentDialog
        })
        google.maps.event.addListener(marker, "click", function() {
            infowindow.open(this.objMap,marker)
        })
        this.infoWindow[k] = infowindow
    }
}});

地図を表示する [チェック]

マーカーを表示する [チェック]

[] をクリックして情報ウィンドウを表示する

ここで何が問題なのですか?さらに情報やコードが必要な場合は、教えてください。

4

1 に答える 1

0

わかりました... 面倒でばかげた質問で本当に申し訳ありませんが、すべてがうまくいきました...

問題は、google.maps.event.addListener 関数内でコンテキスト「this」を参照していたことです... 内部関数内で、親関数メソッド (this.objmap や this.markerSucursal など) を参照できませんでした。google.map オブジェクトを呼び出す前に、プロトタイプメソッド内でコーディングしていたことを忘れないでください。

記録のために、私自身(およびこの問題を抱えている他のすべての人)への答えは次のとおりです(createDialogおよびpreloadMarkersメソッドのみを示します)

preloadMarkers: function(jsonArray){

    var objMap = this.objMap // the initializeMap method sets this object

    for(var k in jsonArray) {
        var localization= new google.maps.LatLng(jsonArray[k].coordenada_x,jsonArray[k].coordenada_y);
        var marker= new google.maps.Marker({
            position: localizacion,
            map: objMap
        })

        this.markerSucursal[k] = marker;
    }
},


createDialog: function(jsonArray){        

    for(var k in jsonArray) {

        var marker = this.markerSucursal[k]
        var objMap = this.objMap
        contentDialog = "<div> <p>testing testing</p> </div>"

        var infowindow = new google.maps.InfoWindow({
            content: contentDialog
        });

        google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(objMap,marker);
        });
    }
}

そしてそれは...魅力のように機能します:)

繰り返しになりますが、お読みいただきありがとうございます。下手な英語で申し訳ありません。ベネズエラからのご挨拶です。

于 2012-07-12T17:47:31.067 に答える