我的Backbone视图实现了google.maps.OverlayView()
。
这个视图包含一些内容的div,我需要处理容器div上的mouseover / out,并点击两个包含div的事件。
我能够获得所需事件的唯一方法是在我的视图中使用google.maps.event.addDomListener
。像这样的东西(复制和粘贴代码):
var MarkerView = MasterView.extend({
events:{
//These events will never be fired
'click .icon-context':function () {},
'mouseout':function (event) {}
},
render:function(){
//this renders the google.maps.OverlayView by implementing onAdd, draw, onRemove
var that = this;
this.overlay.onAdd = function(){
//Code for adding the OverLayView omitted here
that.listeners_ = [
google.maps.event.addDomListener(that.overlay.el, 'mouseout', function () {
//This event should not be handled here
}),
google.maps.event.addDomListener($(that.overlay.el).find('.icon-context').first()[0], 'click', function () {
//This event should not be handled here
}),
];
};
}
});
视图逻辑的核心部分应该是可重用的,因为我想在地图上以及显示/处理几乎相同内容的列表中使用它。通过将我的视图绑定到Google Maps事件侦听器,我将不得不复制相当数量的事件处理代码。感觉不完全正确。
如果视图托管在google.maps.OverlayView
答案 0 :(得分:1)
在创建并将叠加层添加到HTML 后,您必须在视图 上使用this.setElement($(that.overlay.el))
,以便更新EL,以便您可以使用事件哈希
如果你实例化一个新的叠加层,你必须再做一次,让EL指向正确的东西。
不要忘记将它包装在Jquery obj中,这在尝试向infoBoxes添加事件处理程序时帮助了我很多