一些原型与谷歌地图infowindow

时间:2012-07-12 03:24:40

标签: javascript google-maps

我是新来的,我有一个小问题......好吧,我不知道到底有什么问题,所以我希望你能给我一些线索。我希望不要厌烦你,让我们开始吧。

我制作了一个原型“类方法”(使用this)。它运作得很好。

然后,我开始像这样编写我的GoogleMap“Class”

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

显示地图[检查]

显示标记[检查]

点击[]

显示信息窗口

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

1 个答案:

答案 0 :(得分: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);
        });
    }
}

就是这样......就像魅​​力一样:)

再次,非常感谢阅读,抱歉委内瑞拉的英语和问候很糟糕!