如何从选项卡上的面板访问 Wicket JQuery TabbedPanel 中的 ListItem?

How can I access ListItem in a Wicket JQuery TabbedPanel from the panel on the tab?

我在 JQuery 2.1.4 的 Wicket 7.3 中有以下代码:

public class MyTabbedPanel extends JQueryGenericPanel<List<ITab>>
    implements ITabsListener {
...
  @Override
  protected void onInitialize() {
    super.onInitialize();

    this.add( new ListView<ITab>( "tabs", this.getModel() ) {
      @Override
      protected ListItem<ITab> newItem( int index, IModel<ITab> model ) {
        ListItem<ITab> item = super.newItem( index, model );
        item.setVisible( model.getObject().isVisible() );
        item.setOutputMarkupId( true );
        return item;
      }

    @Override
    protected void populateItem( ListItem<ITab> item ) {

如何从面板中的 Java 代码访问此 项目?我已经为每个项目添加了图标,并希望在面板更改时启用/禁用它们。

我在面板代码中试过:

ListItem item = this.findParent( ListItem.class );

但这只会给出 item = null。有一个 "LoadingPanel.class" 作为一个 parent。但这没有 ListItem 或我添加到选项卡的任何其他组件。

我假设您在此处显示的 ListView 只是呈现 "tabs",而不是面板本身。 当前可见的 ITab 面板已添加到 MyTabbedPanel 中的其他位置。

您可以扩展 ITab:

public interface ILoadingTab extends ITab {
  boolean isLoaded();
}

#populateItem() 中根据 #isLoaded() 添加一个图标到 ListItem。

您的选项卡实现 #isLoaded() 然后询问 LoadingPanel 是否已完成加载。

更好的方法是制作图标 "reactive"。 IE。与其试图找到 ListItem 来修改其图标,不如将此逻辑放在图标本身,因此每次 Wicket 呈现图标时,图标本身都会计算是否显示以及图形显示的内容。