Wicket:用fadeIn和fadeOut替换面板(WiQuery,JQuery)

时间:2011-06-23 08:14:41

标签: javascript wicket fadein fadeout replacewith

我有一个DIV,想要显示一个listItem-Panel,如果我点击DIV,listItem-Panel应该由listItemDetail-Panel替换。因此,DIV包含带Wicket的Child-DIV: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-Replacement之后淡化DIV?

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

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

Christ Christ Christos

1 个答案:

答案 0 :(得分: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'是完全限定名称,如上面的名称或'*',它将监听所有频道。