2011-06-23 23 views
1

我有一個DIV並希望顯示一個listItem-Panel,如果我點擊DIV,listItem-Panel應該由listItemDetail-Panel替換。出於這個原因,DIV包含一個Wicket:ID = curPanel的Child-DIV。Wicket:使用fadeIn和fadeOut(WiQuery,JQuery)替換面板

div.add(new AjaxEventBehavior("onclick") { 
     @Override 
     protected IAjaxCallDecorator getAjaxCallDecorator() { 
      return new AjaxCallDecorator() { 

       @Override 
       public CharSequence decorateScript(final CharSequence script) { 
        return String.format("$('#%s').fadeOut(1000, function(){ %s });", div.getMarkupId(), script); 
       } 

      }; 
     } 

     @Override 
     protected void onEvent(final AjaxRequestTarget target) { 
      final Panel curPanel = (Panel) div.get("curPanel"); 

      if (curPanel.getClass().equals(listItemDetailPanel.class)) { 
       curPanel.replaceWith(listItemPanel); 
      } else { 
       curPanel.replaceWith(listItemDetailPanel); 
      } 

      target.addComponent(div); 
      target.appendJavascript("new Effect.FadIn($('" + div.getMarkupId() + "'))"); 
     } 
    }); 

我使用AjaxCallDecorator到淡出的DIV(其中包含listItemPanel或listItemDetailPanel)。之後,小組將被另一個替換,然後DIV應該通過fadeIn出現。

但這是問題!我應該怎麼做,在Ajax-Replacement之後淡入DIV?

您可以看到target.appendJavascript()調用,但這不起作用!

我需要Wicket/WiQuery的解決方案。我知道jQuery的解決方案,我想採用它們。

Thx Christoph

回答

0

使用target.prependJavaScript()。這在之前執行的DOM替換。而在之後#appendJavaScript()是

此外,使用1.5-RC5 Wicket在Javascript中支持PubSub,它在DOM替換之前和之後分別發佈「/ dom/node/removed」和「/ dom/node/added」通道事件。

您可以訂閱(使用IHeaderResponse將此Javascript添加到您的頁面): Wicket.Event.subscribe(channelName);

其中'channelName'是完全限定名稱或上面的'*',它將監聽所有通道。