OpenLayers:feature.set() -> feature.changed() 似乎没有更改数据

问题描述 投票:0回答:1

我希望每次点击复选框时我的功能都会改变。我已将事件侦听器添加到更改中。我想我会写这个声明(正如我所说的“零”值为 [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'))
                    }
                });
            }
        }
    });
javascript openlayers
1个回答
0
投票

您没有得到预期结果的原因是您将样式函数中的

number
设置为
[0]
。每次调用样式函数时都会发生这种情况,这几乎是每个渲染帧(即每当地图动画或与之交互时)。因此,您的功能将不断重置为其初始
number
值。

要解决此问题,请不要在样式函数中初始化特征中的

number
值,而是在源
addfeature
侦听器中初始化:

verctorSource.on('addfeature', (e) => e.feature.set('number', [0]));

另请注意,您不需要在

feature.changed()
之后调用
feature.set(...)
,因为
set(...)
已经触发了更改。

© www.soinside.com 2019 - 2024. All rights reserved.