Mapbox GL js:如何枚举所有文本字段属性
Mapbox GL js: How to enumerate all textfield properties
是否可以解析 foreach
中的所有 textfield
属性以使用 Mapbox GL js
切换语言?
目标是即使我们从 editor
.
层 add/remove 层编写工作代码
编辑
例如在 Mapbox Studio 中,我们可以使用属性编辑器快速将所有 textfields
的值从 {name_en}
更改为 {name_fr}
.
example 显示了如何为一层执行此操作。
但是如何解析所有层以找到所有 textfield
以全局更改语言?
好的,如果我没理解错的话,您想更新每一层上的每个文本字段以引用一组新的属性({foo_fr} 与 {foo_en} 或其他),当用户更改语言。
无法自动执行此操作。但是你可以:
- 遍历每一层。
- 遍历一组可能包含特定语言文本字段的预定义属性。
- 每一个更新。
第 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(/\{([^_]+)_..\}/, '{_' + newLanguageCode + '}');
}
})
是否可以解析 foreach
中的所有 textfield
属性以使用 Mapbox GL js
切换语言?
目标是即使我们从 editor
.
编辑
例如在 Mapbox Studio 中,我们可以使用属性编辑器快速将所有 textfields
的值从 {name_en}
更改为 {name_fr}
.
example 显示了如何为一层执行此操作。
但是如何解析所有层以找到所有 textfield
以全局更改语言?
好的,如果我没理解错的话,您想更新每一层上的每个文本字段以引用一组新的属性({foo_fr} 与 {foo_en} 或其他),当用户更改语言。
无法自动执行此操作。但是你可以:
- 遍历每一层。
- 遍历一组可能包含特定语言文本字段的预定义属性。
- 每一个更新。
第 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(/\{([^_]+)_..\}/, '{_' + newLanguageCode + '}');
}
})