2017-02-15 87 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