2017-02-15 7 views
0

infoWindow를 표시하는 방법을 알고 있지만 거기에 표시된 버튼에서 이벤트를 캡처하는 데 문제가 있습니다.백본 Marionette Google지도 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"); 
    } 
} 

버튼을 클릭하면 메서드 B를 호출 할 때 정의되지 않는다는 오류가 발생합니다. 나는 나와 시도했다 ..mododB, 등등 ... 그러나 운이 없다. 이 문제를 어떻게 해결할 수 있습니까?

+1

는 [mcve] 주시기 바랍니다. 언뜻 보면 형식이 잘못된 문자열처럼 보입니다 ... –

+0

좋아, 코드를 더 명확하게 업데이트했습니다. – zon7

답변

1

HTML 문자열 대신 DOM 노드로 채워진 InfoWindow를 보여주는 JSFiddle입니다. 이 방법으로 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이다. 이 경우 JSFiddle 환경 때문이라고 생각하지만 Window 스코프로 함수를 설정해야했습니다. 당신이 범위를 디버깅 할 경우

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