4

마커를 클릭하면 사실 (또는 사용자 정의 오버레이) 정보 상자가 열리는 Google지도를 갖고 싶습니다. on) 백본보기. 백본보기는 Ajax 호출을 처음 열었을 때 내용을 가져야하지만 닫히고 다시 열면 서버에 다시 호출하면 안됩니다 (첫 번째 호출에서 결과를 표시해야 함)백본보기를 기반으로 Google지도와 Infobox를 결합하는 방법

정보 상자의 내용이 dom 요소이기 때문에이를 구현하는 방법을 알지 못합니다 (처음에는 열 때만 변경/채우기를 원합니다). (btw 나는 주로 백엔드 개발자입니다. 프런트 엔드는 나에게 매우 새로운 것입니다.)

나는 이와 비슷한 것을하고 있다고 생각했지만, 이것이 올바른 방향이라고 확신하지 못합니다.

var view = new MyOverlayBackboneView({ model: myModel}); 
var infoBoxOptions = { 
    content: view.el 
}; 



var infoBox = new InfoBox(infoBoxOptions); 

var marker = new google.maps.Marker({ 
    map: map, 
    position: new google.maps.LatLng(some_lat, some_lng), 
    ... 
    other marker related parameters 
}); 

marker.infoBox = infoBox; 

google.maps.event.addListener(marker, 'click', function() { 
    this.infoBox.open(map, this); 
}    

여기서 내가 부족한 부분은 수행 할 위치가 적어서 정보창이 처음 열릴 때의 백본보기의 render() 부분입니다.

말할 것도없이, 필자는 infobox를 시작하는 코드의 일부를 가능한 한 깨끗하게하고 백본보기로 스타일 지정 및 ajax 호출을 남기고 싶습니다.

누군가 올바른 방향 (자습서/샘플 코드)을 가르쳐 주시면 감사하겠습니다. 귀하가 제공하는 도움에 미리 감사드립니다. 당신의 정보 상자를 만들 때 다음

MyOverlayBackboneView = Backbone.View.extend({ 
    render: function() { 
    [rendering the contents of your view here] 
    return this; 
    } 
}; 

그리고 :

답변

1

로보기는 다음과 같이 될 수

var infoBoxOptions = { 
    content: view.render().el 
}; 

이 한 번만 렌더링보기를 한 후 렌더링 된 내용을 둘 것 InfoBox에 저장하십시오.

+0

뷰는 서버에서 컬렉션을 가져올 위치는 어디입니까? render()에 넣으면 모든 infoBoxes가 열릴 때가 아니라 생성시 서버에서 꺼내는 것을 의미합니다. 즉, 내가 볼 수없는 서버에서 데이터를 가져 오는 중입니다. infoBox가 열려있을 때만 AJAX 호출이 만들어 지길 원합니다. (백본보기가 보이게됩니다) – Ken

+0

그것으로 해결되었습니다. 타이! @ken 당신은 소켓을 통해 실제 데이터를 보낼 수 있습니다. 방금 클라이언트를위한 템플릿을 보내십시오. socket/ajax를 통해 템플릿을 보내는 방법이 있다면 몰라요. 그런 식으로 내용을 보낼 수 있습니다. 아약스에 대해서는 모르지만, socket.io는 꽤 내려갑니다. – tUrG0n

관련 문제