2012-11-21 10 views
7

Ich befasse mich derzeit mit SlidingPanel von Ikarus widgetset Add-on. Ich versuche, dieses Panel aus der Sicht mit removeComponent() zu entfernen, wenn ich ein "spezielles" Ereignis auf der Server-Seite (zum Beispiel Benutzer klickte die Schaltfläche oder das Fenster wurde Größe) erhalten. Die Komponente ist jedoch weiterhin in der Ansicht sichtbar. Ich habe versucht, die Daten UI zu debuggen empfängt:Das Entfernen der Komponente aus dem Layout schlägt fehl

vor dem Ereignis:

-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 

Nach Ereignis:

-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 

Was ich klar aus der Antwort sehen - das Fenster enthält keine VIkarusSlidingPanel mehr - Aber es ist immer noch da, weil es nicht aus dem DOM entfernt wurde.

  • Das einzige, was mir hilft - Seite neu laden.
  • Entfernen von Schaltflächen aus dem Fenster auf dem gleichen Ereignis - funktioniert perfekt.
  • setVisible(false) funktioniert nicht. Ich erhalte eine leere Seite, wenn ich die Seite danach neu laden möchte. (die javascript-Ausnahme wird ausgelöst)

Was ist das Problem? Kann mir jemand mit einem Workaround helfen?

+0

Wenn Sie eine andere Komponente an derselben Stelle verwenden, funktioniert das Entfernen? – miq

+0

Ja, natürlich. Ich habe in der Post geschrieben: "Entfernen von Schaltflächen aus dem Fenster auf dem gleichen Ereignis - funktioniert perfekt." - Stattdessen kann die Schaltfläche eine Komponente sein und es wird funktionieren. – Viktor

Antwort

0

Überprüfen Sie, ob Ihre Komponente einen sofortigen Status hat. In Vaadin es nur Einstellung von setImmediate (true) auf Komponente. Und ich denke, dass der beste Weg, um die Komponente zu entfernen ist nur verstecken Sie es durch setVisible (falsch).

Wie auch immer, ich hoffe, Sie werden eine Lösung finden.

+0

Beachten Sie, dass das Verstecken von Komponenten in vaadin eine sehr mächtige Methode ist, denn wenn die Komponente versteckt ist, bleibt ihr Zustand auf der Serverseite erhalten und der Client enthält überhaupt keine Daten über die versteckte Komponente - also ist die Komponente nicht mit CSS oder JavaScript versteckt. So ist es sicher, eine Komponente zu verbergen, und der Client erhält keinerlei Informationen darüber. –

Verwandte Themen