2016-06-25 3 views
0

안녕하세요 저는 팔로마 보석을 사용하여 일부 자바 스크립트를 분리합니다. 맵에 마커를 추가하려고하면 gmaps에서 오류 Maximum call stack size exceeded가 표시됩니다.Ruby on rails - gmaps4rails - 마커 데이터 전달. 최대 호출 스택 크기가 초과되었습니다

내 컨트롤러에서 json 형식의 변수 (마커 좌표)를 js 파일로 전달한 다음 해당 변수를 경고 상자 (테스트 용)와 마커에 추가합니다.

var arrCoo = this.params.hash; 
alert(arrCoo); 
markers = handler.addMarkers(arrCoo); 

(this.params.hash은 내 컨트롤러에서 보낸 변수를 호출합니다.)

[{"lat":57.4386015,"lng":16.6152354}] 

하지만 오류 Maximum call stack size exceeded 및 마커와지도가 표시되지 않습니다를 얻을 :이 경우 은 경고 상자는 좌표 예를 표시합니다.


좌표를 복사하여 붙여 넣으면,

markers = handler.addMarkers([{"lat":57.4386015,"lng":16.6152354}]); 

마커는지도에 아무런 문제가 없습니다. 내 경우


markers = handler.addMarkers(arrCoo); 

markers = handler.addMarkers([{"lat":57.4386015,"lng":16.6152354}]); 

차이점은 무엇입니까 ?? 경고 상자와 마커 속성에서 변수가 같은 방식으로 표시되지 않는 이유는 무엇입니까?


업데이트 : 더 많은 정보를 추가하고

. 다음 코드에서는 경고가 좌표 배열을 표시하지만 gmaps가 오류를 표시합니다. 직접 시도하여 markers = handler.addMarkers(this.params.hash);을 추가하면 cannot read property hash of undefined 오류가 발생합니다. 오류를 발생시키지 않고 배열을 넣을 수 있습니까?

Paloma.controller('Gigs', { 
    show: function(){ 

    var arrCoo = this.params.hash; 


    var mapStyle = [{"featureType":"administrative","elementType":"all","stylers":[{"visibility":"on"},{"lightness":33}]},{"featureType":"landscape","elementType":"all","stylers":[{"color":"#f2e5d4"}]},{"featureType":"poi.park","elementType":"geometry","stylers":[{"color":"#c5dac6"}]},{"featureType":"poi.park","elementType":"labels","stylers":[{"visibility":"on"},{"lightness":20}]},{"featureType":"road","elementType":"all","stylers":[{"lightness":20}]},{"featureType":"road.highway","elementType":"geometry","stylers":[{"color":"#c5c6c6"}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#e4d7c6"}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#fbfaf7"}]},{"featureType":"water","elementType":"all","stylers":[{"visibility":"on"},{"color":"#acbcc9"}]}]; 
    var handler = Gmaps.build('Google'); 
     handler.buildMap({ 
     provider: { 
      mapTypeControl: false, 
      streetViewControl: false, 
      styles: mapStyle, 
      zoom: 4, 
      minZoom: 2, 
      maxZoom: 20, 
      center: new google.maps.LatLng(20.68177501, -103.3514794) 
     }, 
     internal: {id: 'gigmap'}}, 
     function(){ 

        alert(arrCoo); 
     markers = handler.addMarkers(arrCoo); 
     handler.bounds.extendWith(markers); 
     handler.fitMapToBounds(); 
     }); 

} 
}); 

답변

1

Maximum call stack size exceeded은 함수가 다른 함수를 호출 할 때 발생합니다. 많은 함수 호출을 연결하면 스택 최대 한계에 도달하여 오류가 발생합니다.

handler.addMarkers(arrCoo);을 수행하면 내부적으로 다른 함수를 호출하여 마커를 그리고 그 결과를 반환하는 함수를 호출합니다.

유일한 해결책은 함수가이 문제를 설명하기위한 스택을

+0

감사를 줄이기 위해 호출 단순화하는 것입니다,하지만 난 후이 작업을 수행 할 수있는 방법은 무엇입니까? 이 배열을 컨트롤러에서 js 파일로 전달하는 다른 방법은 없습니다. –

+0

더 많은 정보와 코드로 내 질문을 업데이트했습니다. –