Mapbox GL js:如何枚举所有文本域属性

时间:2017-04-22 17:46:53

标签: mapbox mapbox-gl-js

是否可以解析editor中的所有textfields属性以使用{name_en}切换语言? 即使我们从{name_fr}添加/删除图层,目标也是编写一个有效的代码。

修改 例如,在Mapbox Studio中,我们可以使用属性编辑器快速将所有textfield的值从find ./components -iname \"*.html\" -exec rsync -R '{}' ./build/ \\; 更改为find ./components -iname \"*.html\" -exec rsync -R ./build/;
enter image description here
example显示了如何为一个图层执行此操作。 但是如何解析所有图层以查找所有find ./components -iname \"*.html\" -exec rsync -R '{}' ./build/; 以全局更改语言?

1 个答案:

答案 0 :(得分:0)

好的,如果我理解正确,你想更新每一层的每个文本字段,以便在用户更改语言时引用一组新的属性({foo_fr} vs {foo_en}或其他)。

没有办法自动做到这一点。但你可以:

  1. 遍历每一层。
  2. 迭代可能包含特定于语言的文本字段的预定义属性集。
  3. 更新每个。
  4. 第2步中的列表很短,可能只是['text-field']。所以它基本上是:

    var newLanguageCode = 'ru';
    
    map.getStyle().layers.forEach(layer => {
      if (layer.type === 'symbol' && layer.layout && layer.layout['text-field'] !== undefined) {
        map
          .setLayoutProperty(layer.id, 'text-field', layer.layout['text-field']
          .replace(/\{([^_]+)_..\}/, '{$1_' + newLanguageCode + '}');
      }
    })