2016-06-25 1 views
0

こんにちは私はいくつかのjavascriptを分離するためにpaloma gemを使用しています。マップにマーカーを追加しようとすると、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}]); 

の違いは何ですか?アラートボックスとマーカー属性によって変数が同じように見えないのはなぜですか?


UPDATE:私はより多くの情報を追加してい

。次のコードではアラートは座標の配列を表示しますが、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

私はより多くの情報と私のコードで私の質問を更新しました。 –