2012-11-21 12 views
7

Attualmente sto trattando con SlidingPanel dal componente aggiuntivo Ikarus widgetset. Sto provando a rimuovere questo pannello dalla vista utilizzando removeComponent() quando ricevo alcuni eventi "speciali" sul lato server (ad esempio, l'utente ha fatto clic sul pulsante o la finestra è stata ridimensionata). Ma il componente è ancora visibile sulla vista. Stavo cercando di eseguire il debug l'interfaccia utente dati riceve:Impossibile rimuovere il componente dal layout

Prima dell'evento:

-Response: 
-change format=uidl pid=PID0 
-com.vaadin.terminal.gwt.client.ui.VWindow id=PID0 height=590px width=815px immediate=true caption=ASM 5.0.7 name=1 theme=acs-reindeer resizable=true main=true  layoutRelativeHeight=true layoutRelativeWidth=true 
     +variables 
     -com.vaadin.terminal.gwt.client.ui.VVerticalLayout id=PID127 height=100.0% width=100.0% margins=0 alignments={} expandRatios={PID133:1,} 
     +com.vaadin.terminal.gwt.client.ui.VHorizontalLayout 
     +com.vaadin.terminal.gwt.client.ui.VPanel 
     +com.vaadin.terminal.gwt.client.ui.VHorizontalLayout 
     +com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility 
     +com.velociti.ikarus.widget.client.ui.VIkarusSlidingPanel 

After:

-Response: 
    -change format=uidl pid=PID0 
    -com.vaadin.terminal.gwt.client.ui.VWindow id=PID0 height=995px width=1853px immediate=true caption=ASM 5.0.7 name=1 theme=acs-reindeer resizable=true main=true layoutRelativeHeight=true layoutRelativeWidth=true 
     +variables 
      -com.vaadin.terminal.gwt.client.ui.VVerticalLayout id=PID127 height=100.0% width=100.0% margins=0 alignments={} expandRatios={PID133:1,} 
      +com.vaadin.terminal.gwt.client.ui.VHorizontalLayout 
      +com.vaadin.terminal.gwt.client.ui.VPanel 
      +com.vaadin.terminal.gwt.client.ui.VHorizontalLayout 
      +com.vaadin.terminal.gwt.client.ui.VUriFragmentUtility 

Quello che vedo chiaramente dalla risposta - la finestra non contiene più VIkarusSlidingPanel - ma in effetti è ancora lì perché non è stato rimosso dal DOM.

  • L'unica cosa che mi aiuta: ricaricare la pagina.
  • Rimuovere i pulsanti dalla finestra sullo stesso evento: funziona perfettamente.
  • setVisible(false) non funziona. Ricevo una pagina vuota quando provo la pagina di ricarica dopo questo. (l'eccezione javacript è lanciata)

Qual è il problema? Qualcuno può aiutarmi con una soluzione?

+0

Se si utilizza qualche altro componente nello stesso luogo, la rimozione funzionerà? – miq

+0

Sì, certo. Ho scritto nel post: "Rimuovere i pulsanti dalla finestra sullo stesso evento - funziona perfettamente." - Invece il pulsante potrebbe essere qualsiasi componente e funzionerà. – Viktor

risposta

0

Verificare se il componente ha uno stato immediato. In Vaadin basta impostare per setImmediate (true) sul componente. E penso che il modo migliore per rimuovere un componente sia nasconderlo semplicemente con setVisible (false).

In ogni caso, spero che troverai una soluzione.

+0

Nota che nascondere i componenti in vaadin è un approccio molto potente poiché quando il componente è nascosto, il suo stato è preservato sul lato server e il client non contiene dati sul componente nascosto, quindi non è come il componente è nascosto con css o javascript. Quindi è sicuro nascondere un componente e il client non riceverà alcuna informazione su di esso. –

Problemi correlati