一些原型与谷歌地图信息窗口

Some prototyping with google maps infowindow

本文关键字:信息 信息窗 窗口 谷歌地图 原型      更新时间:2023-09-26

我是SO的新手,我有一个关于。。。嗯,我不知道这到底是怎么回事,所以我希望你能给我一些线索。我希望不要让你厌烦,所以我们开始吧。

我已经制作了一个原型化的"类方法"(使用这个)。它工作得很好。

然后,我开始把我的谷歌地图"类"编码成这样的

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

显示地图[检查]

显示标记[Check]

单击[]时显示信息窗口

这里可能出了什么问题?如果您需要更多信息或代码,请告诉我。

好的,明白了……我真的很抱歉这个混乱而愚蠢的问题,但我已经解决了。。。

问题是,我在google.maps.event.addListener函数中引用了上下文"this"。。。在内部函数中,我无法引用父函数方法(如this.objmap或this.markrSucursal)。不要忘记,在调用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);
        });
    }
}

就是这样……就像魅力一样:)

再次感谢您的阅读,对委内瑞拉糟糕的英语和问候表示歉意!