2014-11-14 1 views
1

Как я могу выйти из цикла (eachLayer) в листовке?Как сломать листовку каждого слоя?

Я пробовал break и return, но это не сработало.

Ниже мой код:

var bounds = map.getBounds(); 
    var notInBounds = true; 
    markers.eachLayer(function(marker) { 
     if (bounds.contains(marker.getLatLng())) { 
      notInBounds = false; 
      break; 
     } 
    }); 
+0

Обновленный ответ, начиная с января 2017 года, вы можете «вернуть false» в 'eachLayer', который вырвется из цикла. – jamez14

ответ

0

(я согласен с замечаниями, которые говорят, что вы не должны разорвать петлю eachLayer ... так что этот ответ чисто для удовольствия)

Это не возможно без написания собственного цикла ...

eachLayer является очень простой метод: https://github.com/Leaflet/Leaflet/blob/master/src/layer/Layer.js#L103

eachLayer: function (method, context) { 
     for (var i in this._layers) { 
      method.call(context, this._layers[i]); 
     } 
     return this; 
    }, 

Как вы видите, он не проверяет возвращаемое значение из обратного вызова.

Вместо вызова eachLayer, вы должны реализовать свою собственную итерацию (для в) Затем можно обработать возвращаемое значение из функции обратного вызова и разорвать

+0

Обратите внимание, что '_layers' является частным членом, то есть он не является частью API Leaflet и может быть удален в будущих версиях Листа. Подумайте, если разрыв цикла обеспечивает реальное улучшение производительности для вас - если у вас нет * лотов * слоев, я думаю, что разница незначительна. – Liedman

1

Не: ваш метод с break вернут то же значение, что и без break, а разница в производительности бесконечно мала.

Смежные вопросы