Javascript:制作可编辑自定义属性的正确语法(单击时,切换 Leaflet GeoJSON 对象的颜色)

Javascript: Correct syntax for making editable custom properties (on click, toggle colour of Leaflet GeoJSON object)

我已经使用 leaflet 编写了以下 javascript 代码来制作多条红色多段线,每条多段线都有 属性 称为“active”,开始时为 true。

    for (let i = 0; i < railLinks.length; i++) {
        var polyline = new L.geoJSON(railLinks[i].polyline, {
          linkNumber: railLinks[i].linkNumber,
          active: true, //THIS LINE DOESNT DO WHAT I THOUGHT IT WOULD
          style: function(active) {
            return {
              weight: 2,
              color: 'red'
            };
          }
        }).addTo(map);
        
        polyline.on('click', function() {
          set = !this.active
          this.active = set;
          this.setStyle({
            color: getColor(set)
          });
          
        });
    }
    
    function getColor(x) {
      return x  ?   'black':
                    '#888888';
    };

我正在尝试实现一个切换,这样当您单击一条真多段线时,它会变为假,反之亦然。

有了这个我希望第一次点击变成灰色(“假”),然后是黑色,然后是灰色等等。相反,第一次点击变成黑色(代表真),表明初始状态不是真的。

我认为问题出在我的语法上

active: true

不一样属性被改成后面的

this.active

因为我可以将第一个活动设置为任何值而不影响点击行为。知道这应该是什么吗?

对于遇到类似问题的任何人的信息,我现在已经用下面的代码解决了我的问题:

    for (let i = 0; i < railLinks.length; i++) {
        var polyline = new L.geoJSON(railLinks[i].polyline, {
          linkNumber: railLinks[i].linkNumber,
        }).addTo(map);
        polyline.active = true;
        polyline.setStyle({
            weight: 2,
            color: 'red'
        });
        polyline.on('contextmenu', function() {
          set = !this.active
          this.active = set;
          this.setStyle({
            color: getColor(set)
          });
        });
    }
    
    function getColor(x) {
      return x ? 'black':'#888888';
    };