2012-11-21 10 views
7

現在、SlidingPanelをIkarus widgetsetアドオンから処理しています。 サーバー側で「特別な」イベント(たとえば、ユーザーがボタンをクリックした、またはウィンドウのサイズが変更されたなど)を受け取ったときに、removeComponent()を使用してこのパネルをビューから削除しようとしています。コンポーネントはまだビューに表示されます。私はデータのUIをデバッグしようとしていた受信:レイアウトからコンポーネントを削除できません

イベントの前に:

-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 

イベント後:

私ははっきりと応答から見る何
-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 

は - 窓はもうVIkarusSlidingPanelが含まれていません実際、DOMから削除されていないため、まだそこに残っています。

  • 私はページをリロードするのに役立つ唯一のものです。
  • 同じイベントでウィンドウからボタンを削除すると、完全に機能します。
  • setVisible(false)は機能しません。この後に リロードページを試すと空白のページが表示されます。 (javacript例外がスローされます)

何が問題ですか?誰かが回避策を教えてくれますか?

+0

同じ場所に他のコンポーネントを使用している場合は、取り外しができますか? – miq

+0

はい、もちろんです。私は記事に書いています: "同じイベントでウィンドウからボタンを削除する - 完璧に動作します。"代わりに、ボタンはどのコンポーネントでも動作します。 – Viktor

答えて

0

コンポーネントが即時状態であることを確認してください。 Vaadinでは、コンポーネントのsetImmediate(true)で設定します。 私は、コンポーネントを削除する最も良い方法は、setVisible(false)で隠すことです。

とにかく、あなたが解決策を見つけることを望みます。

+0

vaadinのコンポーネントを隠すことは非常に強力なアプローチです。なぜなら、コンポーネントが隠されていると、サーバ側でその状態が保持され、クライアントには隠れコンポーネントに関するデータが全く含まれていないからです。したがって、コンポーネントを隠すことは安全です。クライアントはそれについての情報をまったく受け取らないでしょう。 –

関連する問題