如何访问google.map对象中的“marker”对象?

时间:2014-09-01 12:14:41

标签: javascript google-maps-api-3 drupal-7

我在Drupal中使用谷歌地图(但我不认为这与我的问题有关)。 在视图(Drupal中的页面显示)中,我在Google Map上显示标记。 我在外部块中显示地图上标记的链接。

我看过this example,但我反过来说的是另一种方式: 我想,当我点击地图标记时,我想显示(或强调)相关链接(和额外数据)。

(function ($) {
    Drupal.behaviors.gmap = {
        attach: function (context, settings) {
            //'auto1map' is the name of my map
            $.each(Drupal.settings.gmap.auto1map.markers, function(index, mymarker){
                console.log(mymarker);

                //using 'mymarker' doesn't trigger the mouseover
                //I need the 'mymarker.marker' marker-object instead
                var marker = ???; 

                //I want to do something like this
                google.maps.event.addListener(marker, 'click', function(e){
                    console.log(index+' finally clicked');
                });
                // ...the rest of my code
            });
        }
    }
})(jQuery);

mymarker对象在Chrome控制台中就是这样:

Object {text: "mytext", latitude: "46.3611897222", longitude: "1.60658955574", title: "Title of mymarker", markername: "mymarkername"…}
"": "mytext"
   latitude: "46.3611897222"
   longitude: "1.60658955574"
|> marker: Vl
   markername: "mymarkername"
   offset: ""
|> opts: Object
   text: "mytext"
   title: "Title of mymarker"

PS:|>代表三角形可展开图标

我需要定位该标记对象,而不是mymarker对象

标记部分包含:

marker: Vl
|> Be: Object
|> __e3_: Object
|> __gm: Mf
|> anchorPoint: T
|> changed: function (a){a in e&&(delete this[Gc],d.k[Ee(this)]=this,hP(d))}
   clickable: true
   closure_uid_887014485: 9
|> gm_accessors_: Object
|> gm_bindings_: Object
|> icon: om.MarkerImage
|> map: Sl
|> position: R
   shadow: null
   title: "Title of mymarker"
   visible: true

如果我尝试mymarker.latitude,我会得到纬度值

如果我尝试$(mymarker).opts,我会得到'opts'对象

但我需要的是获得'标记'部分,但我无法得到它: 我试过了

console.log(mymarker.marker) =>未定义

console.log($(mymarker).marker) => $(mymarker)对象

console.log($(mymarker).get('marker)) =>未定义

我不知道是什么以及如何投射到'Vl',这似乎是标记对象的类型(“标记”类型?)。 我尝试了api guide我无法在任何地方找到有关如何访问此数据的帮助,

编辑 - 我编辑了我的js代码以显示我需要的内容。

编辑 - 感谢@ Dr.Molle和AlexK,我设法实现了我的目标。

这是更新版本:我有一个Drupal视图,显示带有标记的谷歌地图,我还有一个“附件”,在一个不同的块中的html列表中显示相同的标记。 当我点击一个标记时,我想显示相应的列表元素(并隐藏其他元素)。

(function ($) { 
  //When click on marker, act on related link
  Drupal.behaviors.gmap = {
    attach: function (context, settings) {
      //I get all the html list elements 
      var li = $('.view-content .views-field-title').parent();
      //and hide them all
      li.hide();

      //Set index to associate list element and markers
      var index = 0;
      var lastindex = -1;

      //reference for the map
      var map=Drupal.gmap.getMap('auto1map');
      //bind addmarker-handler, the marker is available as callback-argument 
      map.bind('addmarker', function (m) {
        var element = $(li)[index];
        m.marker.index=index;

        //remove listeners set automatically by the library  
        google.maps.event.clearListeners(m.marker, 'click');

        //add  your custom listener
        google.maps.event.addListener(m.marker, 'click',function(){
          //Hide last shown element
          if (lastindex != -1){
            $($(li)[lastindex]).hide();
          }
          //Show the html element corresponding to the marker
          $(element).show();
          //Set new lastindex
          lastindex = parseInt(m.marker.index);
        });

        index++;
      });
    }
  };
})(jQuery);

1 个答案:

答案 0 :(得分:1)

我不熟悉drupal和这个插件,但似乎问题不是如何来访问标记,问题是何时来访问标记(google.maps.Marker - 实例)。

当函数运行时,latitudelongitude等标量值已通过设置提供,但稍后会创建google.map.Markers。

扩展控制台时会看到标记,但是当您展开对象时,您会看到对象的状态,而不是调用console.log时对象的状态

可能的解决方案: 在地图中添加addmarker - 侦听器(将在标记添加到地图时执行),您可以在其中分配自定义点击侦听器:

(function ($) {
    Drupal.behaviors.gmap = {
        attach: function (context, settings) {
          //reference for the map
          var map=Drupal.gmap.getMap('auto1map');

          //bind addmarker-handler, the marker is available as callback-argument  
          map.bind('addmarker', function (m) {
            //remove listeners set automatically by the library  
            google.maps.event.clearListeners(m.marker, 'click');
            //add  your custom listener
            google.maps.event.addListener(m.marker, 'click',function(){
              alert('This marker is placed \n@'+this.getPosition().toString());
            });
          });
        }
    }
})(jQuery);

奇怪的是,可以通过设置(例如infoWindow-creation和ajax-callbacks)设置不同类型的点击行为,但我没有找到定义简单回调函数的选项。