2017-02-15 90 views
0

我知道如何显示infoWindow,但是我遇到了从显示那里的按钮捕获事件的问题。Backbone Marionette Google Maps infowindow按钮事件

var view = Marionette.LayoutView.extend({ 
    ... 
    methodA: function(){ 
     me.showMapInfoWindow(marker, "Test popup<button onclick='methodB()'>Click me</button>") 
     me.infoWindow.open(me.map, marker); 
    }, 
    methodB: function(){ 
     console.log("test"); 
    } 
} 

当我点击按钮时,在调用methodB时表示没有定义它时出现错误。我用me.methodB等尝试过,但没有运气。我怎样才能解决这个问题?

+1

请包括[MCVE。乍一看,它看起来像一个格式不正确的字符串... –

+0

好吧,我已经更新了代码,以便更清楚 – zon7

回答

1

这是一个JSFiddle,它显示了一个填充了DOM节点的InfoWindow,而不是HTML字符串。这样,我们可以使用jQuery将一个编程事件添加到DOM,它可以访问当前范围,如图所示。

var $infoWindow = $('<div>Test popup<button>Click me</button></div>'); 
    $infoWindow.find('button').click(_.bind(this.methodB, this)); 
    me.showMapInfoWindow(marker, $infoWindow.get(0)); 
    me.infoWindow.open(me.map, marker); 

答到第一个问题

这里用一个信息窗口发射一个全局函数JSFiddle。在这种情况下,我不得不将该函数设置为Window范围,但我相信这是由于JSFiddle环境。

window.myFunction = function() { 
    window.alert("function fired!"); 
} 

...

var html = '<button onclick=\'myFunction()\'>Click me</button>'; 

,如果你要调试的范围,我建议使用debugger声明:

var html = '<button onclick=\'debugger;\'>Click me</button>'; 
+0

我知道我可以用全局方法做到这一点,但我不想这样做 – zon7

+0

你已经更新了你的例子,现在我看到你不仅需要函数,还需要对象的上下文,我会更新答案 – mikeapr4