我希望在屏幕上使用Wicket提供大量列表。
该列表包含具有大量ajax / js功能的Panel
。列表往往会变长,所以我构建了一些限制,只显示前10个条目。要获得更多条目,用户必须按“更多”链接。
但是,这些项目位于ListView
(可以是任何转发器)。如果我想向转发器添加项目,Wicket强制我将转发器添加到AjaxRequestTarget。结果是浏览器中转发器的完全重绘。
我想阻止这一点。我想我可以通过jQuery / javascript完全做到这一点;通过要求新的10个条目在一个不可见的div中呈现,然后将它们添加到我的列表中。这看起来非常邪恶。
有人能提出更好的方法吗?
答案 0 :(得分:1)
我遇到了同样的问题,只能用wicket来解决它:
创建一个派生自GenericPanel
(或只是Panel
)的类,其中包含:
IModel<Long> currentOffsetModel
ListView
AjaxLink
div
(或任何其他占位符元素)清空为WebmarkupContainer
在AjaxLink - onClick
方法中,您需要替换占位符div
使用自定义类的新Object(“replaceWith”),将AjaxLink可见性设置为false和
AjaxLink和新的Object to AjaxRequestTarget:
class EndlessListPanel extends Panel {
WebmarkupContainer placeholder = new WebmarkupContainer("placeholder");
...
AjaxLink<Void> nextListElem = new AjaxLink<Void>("next") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
int offset = offsetModel.getObject().intValue();
EndlessListPanel next = new NewsPanelList("placeholder",offset + 5);
placeholder.replaceWith(next);
setVisibilityAllowed(false);
target.add(this, next );
}
@Override
protected void onConfigure() {
// The "if" prevents "previous" EndlessListPanel to query the LDM.
if (isVisibilityAllowed()) {
setVisibilityAllowed(!listing.getObject().isReachedEnd());
}
super.onConfigure();
}
};
...
}
对应的html:
<wicket:panel> <wicket:container wicket:id="listItem"/> <a wicket:id="next">Next</a> <div wicket:id="placeholder"></div> </wicket:panel>
答案 1 :(得分:0)
为什么不使用PageableListView
和PagingNavigator
?这似乎完全符合您的要求。