2016-06-16 4 views
0

私の目的は、レイヤーグループを使用してリーフレットに追加されたマーカーをすべて削除することです。前のページで、マーカーの新しいレイヤーグループ(次のページのマーカー)を追加すると、ブラウザーでこのエラーが表示され、マーカーはマップに追加されません。リーフレットマップ - マーカーレイヤーグループを削除し、別のマーカーレイヤーグループを追加する

エラーは - Uncaught TypeError:layer.onAddは関数ではありません。

コードは、それが動作するマップ・コンテナを初期化した後、初めてaddMarkersListを呼び出すときに、上記のコードに問題がある

var leaflet_factory = { 
    //initializing map container 
    initialize: function() { 
     var map = L.map('mapresults'); 
     var googleLayer = new L.Google('ROADMAP'); 
     map.addLayer(googleLayer); 
    }, 

    //set view of mao 
    setview: function(lat, long, zoom) { 

     map.setView([lat, long], zoom); 

    }, 

    //add list of markers to maps 

    addMarkersList: function(marker_array) { 
     var markerArray = []; 
     $.each(marker_array, function(key, data) { 
      var marker_pointer = L.marker([data.lat, data.long]).bindPopup('<a href="/' + $(this).attr('data-slug') + '"><strong>' + $(this).attr('data-vendor').capitalize() + '</strong><br></a>' + $(this).attr('data-location').capitalize()); 
      markerArray.push(marker_pointer); 
     }); 
     window.page_makers_layer = L.layerGroup(markerArray); 
     window.page_makers_layer.addTo(map); 

    }, 

    //remove the current marker layer group 

    removeMarkerLayer: function() { 

     map.removeLayer(window.page_makers_layer); 

    } 
} 

です。 しかし、既存のマーカーレイヤーを削除するremoveMarkerLayerを呼び出した後にaddMarkerListを新しいマーカーリスト(lat long pair)で呼び出すと、次のエラーが表示されてデバッグしようとしています。

Uncaught TypeError: layer.onAdd is not a function 

私が間違っている箇所を指摘してください。

+0

あなたに役立つ情報がまだありません。とにかく 'initialize'スコープ内で' map'を定義するのは非常に奇妙です。 – ghybs

+0

ええ、それは悪いですが、これは実際のコードではありません。実際のコードは、現在チームに属していない他の人によって書かれた場合、さらに最悪です。教えてくれてありがとう。 – user3775217

答えて

1

あなたはいくつかのことを間違っています。ない破滅的に間違っている、ちょうどアンチパターン間違っている、例えば:

map.removeLayer(window.page_makers_layer); 

あなたのデータへの参照を格納するませ用窓グローバルを行います(何をやっているのあなたが本当にしている場合を除き、本当に、本当にしてください)。ファクトリまたはモジュールでマップ作成をラップする場合は、データをそのスコープに格納します。

var leaflet_factory = { 

factory patternに従わないと何かを工場名にしないでください。それは非常に混乱しています。別の名前を付けてCJSモジュールにするか、まったくスキップしてください。

一般的なプログラミングパターンの研究。ウェブページに一度だけ表示されるものはありますか?シングルトンを考えてみましょう。

gives me following error which I am trying to debug.

どのようにデバッグしようとしていますか?ブラウザのデバッグ機能を使用する方法を学び、完全なスタックトレースを提供してください。

問題のある変数の値を容易に把握し、呼び出しが行われたときにそれがL.LayerGroupのインスタンスであるかどうかを確認することができます。

+0

私を教育してくれてありがとう。 – user3775217

関連する問題