1

DIV があり、listItem-Panel を表示したいのですが、DIV をクリックすると、listItem-Panel が listItemDetail-Panel に置き換えられます。このため、DIV には Wicket:ID=curPanel の Child-DIV が含まれています。

    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 はフェードインを介して表示されます。

しかし、これが問題です!Ajax 置換後に DIV をフェードインするにはどうすればよいですか?

target.appendJavascript() 呼び出しを見ることができますが、これは機能しませんでした!

Wicket/WiQuery のソリューションが必要です。私はjQueryのソリューションを知っており、それらを採用したいと考えています。

Thxクリストフ

4

1 に答える 1

0

target.prependJavaScript() を使用します。これは、DOM 置換の前に実行されます。#appendJavaScript() はafterです。

さらに、1.5-RC5 では、Wicket は Javascript で PubSub をサポートし、DOM 置換の前後にそれぞれ「/dom/node/removing」および「/dom/node/added」チャネルのイベントを発行します。

次の方法で購読できます (IHeaderResponse を使用して、この Javascript をページに追加します): Wicket.Event.subscribe(channelName);

ここで、'channelName' は上記の完全修飾名か、すべてのチャネルをリッスンする '*' のいずれかです。

于 2011-06-23T08:30:33.770 に答える