我在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);
答案 0 :(得分:1)
我不熟悉drupal和这个插件,但似乎问题不是如何来访问标记,问题是何时来访问标记(google.maps.Marker
- 实例)。
当函数运行时,latitude
和longitude
等标量值已通过设置提供,但稍后会创建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)设置不同类型的点击行为,但我没有找到定义简单回调函数的选项。