Estoy usando Vaadin 8 y LoadingIndicator me está causando algunos problemas. Para el 90% del tiempo necesito que se configure en consecuencia:
Integer.MAXPero para algunas acciones específicas, necesito que esto se modifique, de modo que la superposición (indicador de carga) se muestre instantáneamente, en lugar de esperar los 300 ms preconfigurados. Por ejemplo, cuando hago clic en un botón, quiero que se muestre al instante. Esto, sin embargo, es problemático, porque si configuro el primer retraso en cero durante el procesamiento del evento de clic de botón, solo se aplica después de que finaliza el evento. Por esta razón, quiero ejecutar algún método JS, que establecería este retraso en cero. Intenté llamar directamente al método JS para mostrar la superposición al instante, pero todavía está influenciado por LoadingIndicatorConfiguration.
Editar: por el momento, la solución funcional (no la mejor) que se me ocurrió es crear una clase CSS que imite el v-loading-indicator y crear un método JavaScript que agregue un elemento div al comienzo del elemento del body y luego agrega esta clase CSS al elemento div . Luego, cuando se crea el botón, ejecuto (nuevamente usando JS; esto es fundamental) addEventListener en este div y agrego el método para mostrar el indicador de carga.
Normalmente, la interfaz de usuario en el navegador se actualiza solo después de que la solicitud se haya procesado por completo. Por lo tanto, configurar el retraso antes de que se haga clic en el botón funciona, pero no cuando se hace después del clic. Para cambiar esto, debe habilitar Push para actualizaciones inmediatas de la interfaz de usuario. Pruebe el siguiente código con y sin Push y debería ver una diferencia en el comportamiento del indicador de carga.
@Push public class DemoUI extends UI { protected void init(VaadinRequest vaadinRequest) { VerticalLayout layout = new VerticalLayout(); layout.setSizeFull(); Button loadingButton = new Button(); loadingButton.addClickListener(e -> { getLoadingIndicatorConfiguration().setFirstDelay(0); getLoadingIndicatorConfiguration().setSecondDelay(1000); getLoadingIndicatorConfiguration().setThirdDelay(2500); try { Thread.sleep(5000); } catch (InterruptedException e1) { }); layout.addComponent(button); setContent(layout); } } @WebServlet(value = "/*", asyncSupported = true) @VaadinServletConfiguration(productionMode = false, ui = DemoUI.class) public static class Servlet extends VaadinServlet { }