是否有一个转发器组件,当向下滚动时会通过ajax附加更多项目,但不会将所有项目保留在模型中?当你点击“更多”时,像facebook这样的东西。
换句话说,如何保留组件,同时保留当前内容,而不关心它?
注意:我正在寻找一般解决方案,不仅仅是表格。
更新:我可以写一些JavaScript。
更新:我想我可以 1)在ListView之后添加一些空组件 2)附加时,将其替换为新的ListView,然后添加另一个空。 不确定它是否可以在Wicket中实现。
答案 0 :(得分:1)
答案 1 :(得分:0)
答案 2 :(得分:0)
更新:我想我可以1)在ListView之后添加一些空组件2)当追加时,用新的ListView替换它,然后添加另一个空。不确定它是否可以在Wicket中实现。
听起来不错。对于简单部分(“更多按钮”),只需创建一个包含RepeatingView,空WebMarkupContainer和AjaxLink的新Panel(如果允许分页/链接可见,则添加一些逻辑)。
现在,对于AjaxLink的onClick,使用您正在使用的相同面板替换WebMarkupContainer,添加一些分页信息并隐藏AjaxLink。
我写了一个极端基本的例子来说明一种可能的方法。
public class MoreRepeaterPanel extends Panel {
public MoreRepeaterPanel(String id, IModel<?> model) {
super(id, model);
}
@Override
protected void onInitialize() {
super.onInitialize();
List<String> stringList = Arrays.asList(new String[] { "0", "1" });
IDataProvider<String> idataProvider = new ListDataProvider(stringList);
DataView<String> dataView = new DataView<String>("dataView", idataProvider) {
@Override
protected void populateItem(Item<String> item) {
item.add(new Label("dataString", item.getModelObject()));
}
};
add(dataView);
final WebMarkupContainer moreContent = new WebMarkupContainer("moreContent", new Model<Serializable>());
moreContent.setOutputMarkupId(true);
add(moreContent);
AjaxLink<Void> moreLink = new AjaxLink<Void>("moreLink") {
@Override
public void onClick(AjaxRequestTarget target) {
WebMarkupContainer replaceMoreContent = new MoreRepeaterPanel(moreContent.getId(), new Model<Serializable>());
moreContent.replaceWith(replaceMoreContent);
this.setVisible(false);
target.add(replaceMoreContent, this);
}
};
moreLink.setOutputMarkupId(true);
add(moreLink);
}
}