如何处理实现google.maps.OverlayView的Backbone事件?

时间:2012-10-15 15:58:28

标签: google-maps google-maps-api-3 backbone.js backbone-events

我的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

内,如何让我的视图“本机”处理事件

1 个答案:

答案 0 :(得分:1)

在创建并将叠加层添加到HTML 后,您必须在视图 上使用this.setElement($(that.overlay.el)),以便更新EL,以便您可以使用事件哈希

如果你实例化一个新的叠加层,你必须再做一次,让EL指向正确的东西。

不要忘记将它包装在Jquery obj中,这在尝试向infoBoxes添加事件处理程序时帮助了我很多