簡體   English   中英

如何避免代碼重復?

[英]How can I avoid code duplication?

我有以下JQuery代碼,我很想得到DRY。 目前只有2個標記,但有30多個標記,所以我需要一個干凈的解決方案:

L.mapbox.accessToken = 'secret_token';
var map = L.mapbox.map('map', 'mapbox.streets')
    .setView([-12.260355, 29.927956], 11);

var geoJson01 = {
    features: [{
        type: 'Feature',
        properties: {
            'marker-size': 'large',
            'marker-symbol': 'embassy',
            video: '<iframe src="http://www.example.com/test1.html" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
        },
        geometry: {
            type: 'Point',
            coordinates: [29.91, -12.28]
        }
    }]
};
var geoJson02 = {
    features: [{
        type: 'Feature',
        properties: {
            'marker-size': 'large',
            'marker-symbol': 'embassy',
            video: '<iframe src="http://www.example.com/test2.html" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
        },
        geometry: {
            type: 'Point',
            coordinates: [29.81, -12.18]
        }
    }]
};

var myLayer01 = L.mapbox.featureLayer().addTo(map);
var myLayer02 = L.mapbox.featureLayer().addTo(map);

myLayer01.on('layeradd', function(e) {
    var marker = e.layer,
        feature = marker.feature;
    var popupContent =  feature.properties.video;
    marker.bindPopup(popupContent,{
        closeButton: false,
        minWidth: 300,
        maxWidth: 810
    });
});
myLayer02.on('layeradd', function(e) {
    var marker = e.layer,
        feature = marker.feature;
    var popupContent =  feature.properties.video;
    marker.bindPopup(popupContent,{
        closeButton: false,
        minWidth: 300,
        maxWidth: 810
    });
});

myLayer01.setGeoJSON(geoJson01);
myLayer02.setGeoJSON(geoJson02);

我怎樣才能做到這一點?

將差異提取到數組中的對象然后forEach over it: -

var markers = [

  {
    coordinates: [29.91, -12.28],
    video: '"http://www.example.com/test1.html"'
  }, {
    coordinates: [29.81, -12.18],
    video: '"http://www.example.com/test2.html"'
  }

];

L.mapbox.accessToken = 'secret_token';
var map = L.mapbox.map('map', 'mapbox.streets')
  .setView([-12.260355, 29.927956], 11);

function setMarker(obj) {

  var geoJson01 = {
    features: [{
      type: 'Feature',
      properties: {
        'marker-size': 'large',
        'marker-symbol': 'embassy',
        video: '<iframe src=' + obj.video + ' frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
      },
      geometry: {
        type: 'Point',
        coordinates: obj.coordinates
      }
    }]
  };

  var myLayer01 = L.mapbox.featureLayer().addTo(map);

  myLayer01.on('layeradd', function(e) {
    var marker = e.layer,
      feature = marker.feature;
    var popupContent = feature.properties.video;
    marker.bindPopup(popupContent, {
      closeButton: false,
      minWidth: 300,
      maxWidth: 810
    });
  });

  myLayer01.setGeoJSON(geoJson01);
}

markers.forEach(function(m) {

  setMarker(m);

})

這應該工作

L.mapbox.accessToken = 'secret_token';
    var map = L.mapbox.map('map', 'mapbox.streets')
        .setView([-12.260355, 29.927956], 11);

    // new
    var array = [{
        features : [{
            type : 'Feature',
            properties : {
                'marker-size' : 'large',
                'marker-symbol' : 'embassy',
                video : '<iframe src="http://www.example.com/test1.html" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
            },
            geometry : {
                type : 'Point',
                coordinates : [29.91, -12.28]
            }
        }]
    }, {
        features : [{
            type : 'Feature',
            properties : {
                'marker-size' : 'large',
                'marker-symbol' : 'embassy',
                video : '<iframe src="http://www.example.com/test2.html" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>',
            },
            geometry : {
                type : 'Point',
                coordinates : [29.81, -12.18]
            }
        }]
    }];

    var layers = [];
    for(var i = 0; i < array.length; i++)
    {
        layers[i] = L.mapbox.featureLayer().addTo(map);
        layers[i].on('layeradd', function(e)
        {
            var marker = e.layer,
                feature = marker.feature;
            var popupContent = feature.properties.video;
            marker.bindPopup(popupContent, {
                closeButton : false,
                minWidth : 300,
                maxWidth : 810
            });
        });
        layers[i].setGeoJSON(array[i]);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM