Vaadin 组合框分隔符

Vaadin combobox separator

我目前正在开发一个 Vaadin 应用程序,我已经满足了在项目之间使用一些分隔符的 ComboBox 的需要。我一直在寻找周围,目前似乎没有办法实现这一目标。

更具体:

到目前为止我尝试过的:
我重写了 ComboBoxsetInternalValue 方法,无法 select 像这样的分隔符:

public class ComboBoxWithSeparators() {
    @Override
    protected void setInternalValue(Object newValue) {
        Object oldValue = super.getValue();
        if(isSeparator)
            super.setInternalValue(oldValue);
        else
            super.setInternalValue(newValue);
    }
}

这有点管用,但是当您 select 分隔符时,它会在 selected 框中显示几分之一秒,然后被旧元素覆盖。
所以,我的实际问题是: 有没有办法不启用 selecting ComboBox 中的项目?

相关: Add an item in ComboBox and disable it with JS

目前无法在 Vaadin 中获得带有分隔符的 ComboBox 之类的东西,但是有一些解决方法可以代替它:


该组件支持分隔符、类别和 enabling/disabling 项。缺点是它不允许像 ComboBox 这样的过滤,但您可以为通常的 select 离子添加快捷方式。

  • Anidated ComboBox:

    这样您可以按 or/and 类型的项目进行过滤,但您无法看到您拥有的每个项目,因为它们是按 categories/types 筛选的。当然,您可以添加一个包含所有元素的类别来绕过此限制。

  • ComboBox 没有-select可用的项目:
    此解决方法的作用与通常的 ComboBox 相同,但您正在覆盖 #setInternalValue 以使某些元素无法 select,例如:

    public class ComboBoxWithSeparators() {
        @Override
        protected void setInternalValue(Object newValue) {
            Object oldValue = super.getValue();
            if(isSeparator(newValue))
                super.setInternalValue(oldValue);
            else
                super.setInternalValue(newValue);
        }
    }
    

这里的问题是您可以 实际上 select 分隔符,但是 #setInternalValue 覆盖将恢复旧元素。这可能会导致奇怪的行为。

  • @AndréSchild nativeSelectExt7:
    此选项提供与 ComboBox 相同的功能,没有 select 可用的项目 但更好,因为它突出显示禁用的项目,并且完全不允许 selecting其中之一。