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 回答