如果所有包含的 Wicket 组件都不可见,则隐藏 HTML 元素

Hiding a HTML element if all its contained Wicket components are invisible

我有一个 HTML 元素,如果它包含的 Wicket 组件 foo 是不可见的,它就会被隐藏。

<span class="ig" wicket:enclosure="foo">
  <span class="iga">
    <span wicket:id="foo"/>
  </span>
</span>

现在我必须添加第二个 Wicket 组件 bar,只有在 foobar 可见时才应显示外壳。像这样:

<span class="ig" wicket:enclosure="foo-or-bar???">
  <span class="iga">
    <span wicket:id="foo"/>
    <span wicket:id="bar"/>
  </span>
</span>

但是怎么办?一个复杂的问题是,组件的可见性可能会因 AJAX 个事件而改变。

将逻辑移至您的 Java 代码!

Component foo = ...
Component bar = ...
WebMarkupContainer wrapper = new WebMarkupContainer("wrapper") {
  @Override public void onConfigure() {
    super.onConfigure();
    foo.configure();
    bar.configure();
    setVisible(foo.isVisible() && bar.isVisible());
  }
};
wrapper.add(foo);
wrapper.add(bar);
add(wrapper);


<span class="ig" wicket:id="wrapper">
  <span class="iga">
    <span wicket:id="foo"/>
    <span wicket:id="bar"/>
  </span>
</span>

P.S。我建议您几乎在所有情况下都避免使用 wicket:enclosure!有很多极端情况它会崩溃。您可以查看 Wicket JIRA 以获取示例。