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-Replacement 之后淡入 DIV?

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

我需要 Wicket/WiQuery 的解决方案。我知道 jQuery 的解决方案,我想采用它们。

谢谢克里斯托夫

4

1 回答 1

0

使用 target.prependJavaScript()。这是在DOM 替换之前执行的。虽然 #appendJavaScript().

此外,随着 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 回答