我希望每次点击复选框时我的功能都会改变。我已将事件侦听器添加到更改中。我想我会写这个声明(正如我所说的“零”值为 [0])
if (currentValue.length == 1) { feature.set('number', data_languages[language][index]); feature.changed() }
然后它应该进入“else”语句(因为我的变量 data_languages[language][index] 中的任何数据都是一个包含 4 个元素的数组)。但我继续使用“if”语句。
input.addEventListener('change', function () {
console.log(vectorLayer.getSource().getFeatures())
if (input.checked) {
var language = Object.keys(language_codes).find(key => language_codes[key] == input.id.split(':')[0]);
var category = input.id.split(':')[1]
if (category) {
category = parseInt(category)
// console.log(language, category)
var features = vectorLayer.getSource().getFeatures();
features.forEach(function (feature, index) {
var currentValue = feature.get('number');
if (currentValue.length == 1) {
feature.set('number', data_languages[language][index]);
feature.changed()
} else {
console.log(feature.get('number'))
}
});
}
}
});
您没有得到预期结果的原因是您将样式函数中的
number
设置为[0]
。每次调用样式函数时都会发生这种情况,这几乎是每个渲染帧(即每当地图动画或与之交互时)。因此,您的功能将不断重置为其初始 number
值。
要解决此问题,请不要在样式函数中初始化特征中的
number
值,而是在源 addfeature
侦听器中初始化:
verctorSource.on('addfeature', (e) => e.feature.set('number', [0]));
另请注意,您不需要在
feature.changed()
之后调用 feature.set(...)
,因为 set(...)
已经触发了更改。