Wicket: замена панелей на fadeIn и fadeOut (WiQuery, JQuery)

У меня есть DIV и я хочу показать панель listItem-Panel, и если я нажму на DIV, панель listItem-Panel должна быть заменена панелью listItemDetail-Panel. По этой причине DIV содержит Child-DIV с Wicket:ID=curPanel.

    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-замены исчезнуть в DIV?

Вы можете увидеть вызов target.appendJavascript(), но это не сработало!

Мне нужно решение для Wicket/WiQuery. Я знаю решение для jQuery и хочу его применить.

Спасибо Кристоф


person Christoph Hennig    schedule 23.06.2011    source источник


Ответы (1)


Используйте target.prependJavaScript(). Это выполняется перед заменой DOM. В то время как #appendJavaScript() после.

Кроме того, с 1.5-RC5 Wicket поддерживает PubSub в своем Javascript и публикует событие для каналов «/dom/node/removing» и «/dom/node/added» соответственно до и после замены DOM.

Вы можете подписаться с помощью (используйте IHeaderResponse, чтобы добавить этот Javascript на свою страницу): Wicket.Event.subscribe(channelName);

где «channelName» — это либо полное имя, как указано выше, либо «*», которое будет прослушивать все каналы.

person martin-g    schedule 23.06.2011