2017-02-15 20 views
0

Я знаю, как отображать infoWindow, но у меня есть проблема с захватом события с отображаемой на нем кнопки.Магистральная марионетка Google Maps infowindow button event

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"); 
    } 
} 

Когда я нажимаю кнопку, я получаю сообщение об ошибке при вызове методаB, говорящего, что он не определен. Я пробовал с me.methodB и т. Д., Но не повезло. Как я могу это исправить?

+1

Пожалуйста, включите [mcve]. На первый взгляд, это выглядит плохо форматированная строка ... –

+0

Хорошо, я обновил код, чтобы быть более ясным – zon7

ответ

1

Это JSFiddle, показывающий InfoWindow, заполненный узлом DOM, а не строку 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 показывающий InfoWindow обжиг глобальную функцию. В этом случае мне пришлось установить функцию в область «Окно», хотя я считаю, что это связано с средой 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