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