如何从选项卡上的面板访问 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 呈现图标时,图标本身都会计算是否显示以及图形显示的内容。
我在 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 呈现图标时,图标本身都会计算是否显示以及图形显示的内容。