通过 AbstractAjaxTimerBehavior 控制 wicket 组件的可见性
Controlling visibility of wicket component via AbstractAjaxTimerBehavior
我正在使用 Wicket 8.10。
我有一个 Wicket 组件,我想根据某些外部条件动态隐藏或显示它。为此,我有以下代码:
var mccc = new MyCoolCustomComponent("component"); // Custom component I wrote
mccc.setOutputMarkupId(true);
mccc.setOutputMarkupPlaceholderTag(true);
mccc.setVisible(false); //Should be hidden initially
var container = new WebMarkupContainer("container");
container.setOutputMarkupId(true);
container.setOutputMarkupPlaceholderTag(true);
container.add(mccc);
add(container);
var updateTimer = new AbstractAjaxTimerBehavior(Duration.seconds(1)) {
@Override
protected void onTimer(AjaxRequestTarget target) {
if(FooSingleton.instance().isBar()) {
mccc.setVisible(true);
} else {
mccc.setVisible(false);
}
target.add(mccc);
}
};
container.add(updateTimer);
对应的HTML是这样的:
<div wicket:id="container" >
<div wicket:id="component"/>
</div>
我希望发生的事情:该组件最初是隐藏的。当 isBar()
returns true
组件显示时,一旦 returns false
再次隐藏。
实际情况:组件最初是隐藏的。它显示一次 isBar()
变成 true
但 不会 一旦 isBar()
returns false
.[=21 变得不可见=]
我也想过使用一个AttributeModifier
来使用CSSdisplay
属性,但是我找不到如何改变修饰符的值。
我用CSS解决了它:
mccc.add(new AttributeModifier("style",
() -> {
if (FooSingleton.instance().isBar()) {
return "";
}
return "display: none;";
}));
我确定解决方案不是很好,但它现在有效。
我正在使用 Wicket 8.10。
我有一个 Wicket 组件,我想根据某些外部条件动态隐藏或显示它。为此,我有以下代码:
var mccc = new MyCoolCustomComponent("component"); // Custom component I wrote
mccc.setOutputMarkupId(true);
mccc.setOutputMarkupPlaceholderTag(true);
mccc.setVisible(false); //Should be hidden initially
var container = new WebMarkupContainer("container");
container.setOutputMarkupId(true);
container.setOutputMarkupPlaceholderTag(true);
container.add(mccc);
add(container);
var updateTimer = new AbstractAjaxTimerBehavior(Duration.seconds(1)) {
@Override
protected void onTimer(AjaxRequestTarget target) {
if(FooSingleton.instance().isBar()) {
mccc.setVisible(true);
} else {
mccc.setVisible(false);
}
target.add(mccc);
}
};
container.add(updateTimer);
对应的HTML是这样的:
<div wicket:id="container" >
<div wicket:id="component"/>
</div>
我希望发生的事情:该组件最初是隐藏的。当 isBar()
returns true
组件显示时,一旦 returns false
再次隐藏。
实际情况:组件最初是隐藏的。它显示一次 isBar()
变成 true
但 不会 一旦 isBar()
returns false
.[=21 变得不可见=]
我也想过使用一个AttributeModifier
来使用CSSdisplay
属性,但是我找不到如何改变修饰符的值。
我用CSS解决了它:
mccc.add(new AttributeModifier("style",
() -> {
if (FooSingleton.instance().isBar()) {
return "";
}
return "display: none;";
}));
我确定解决方案不是很好,但它现在有效。