Как я могу заполнить изменение свойства в Компоненте в Vaadin Flow? - PullRequest
1 голос
/ 19 сентября 2019

У меня есть следующий класс для небольшого видимого счетчика:

@Tag("granite-spinner")
@NpmPackage(value = "@granite-elements/granite-spinner", version = "3.0.0")
@JsModule("@granite-elements/granite-spinner/granite-spinner.js")
public class BusyComponent extends Component implements HasEnabled {
    @Override
    public void onEnabledStateChanged(boolean enabled) {
        getElement().setProperty("active", enabled);
    }
}

Это называется в моем MainView:

@Route("")
@PWA(name = "Project Base", shortName = "Project Base")
@Push
public class MainView extends VerticalLayout implements PageConfigurator {
    public MainView() {
        UI currUI = UI.getCurrent();
        final BusyComponent bc = new BusyComponent();
        final Button button = new Button("Click me");
        button.addClickListener(event -> {
            button.setEnabled(false);
            bc.setEnabled(true);
            new Thread(() -> {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                currUI.access(() -> {
                    button.setEnabled(true);
                    bc.setEnabled(false);
                });
            }).start();
        });
        add(bc);
        add(button);
    }
}

Кнопка отключается в тот момент, когда я нажимаю, и включается через 3 с.Но Spinner продолжает вращаться.Каким-то образом изменение свойства не обновляется.Кто-нибудь знает почему?

1 Ответ

1 голос
/ 26 сентября 2019

TLDR; Вы все сделали правильно.В вашем коде нет ничего плохого, и кажется, что веб-компонент не реагирует на изменение атрибута

Более длинная версия:

Я пробовал этот веб-компонент внеК сожалению, проект Vaadin не работает так, как вы ожидаете.Кроме того, в описывается :

active: boolean |ноль |undefined Если отображается истинный счетчик

(поэтому отдельно не подразумевается, что видимость обновляется после однократной установки ..)

Пример здесь Пример JSFiddle

Таким образом, в нашем коде Vaadin нет ничего плохого, и свойство active удаляется / добавляется правильно по нажатию кнопки, если вы включаете devTools.

Кажется, что веб-компонентпросто не реагирует на изменение свойства после того, как оно было обработано один раз.Если посмотреть код реализации, свойство active используется только в render() функциях Код в unpkg .

Я не специалист по веб-компонентам, поэтому не знаю, какэто должно быть реализовано иначе, но, возможно, вы могли бы создать отчет об ошибке в репозитории Github компонента?Не стесняйтесь повторно использовать пример JSFiddle, если хотите:)

...