Wicket:转发器组件在滚动到底部时附加更多项目?

时间:2011-08-04 15:44:49

标签: ajax components scroll wicket repeater

是否有一个转发器组件,当向下滚动时会通过ajax附加更多项目,但不会将所有项目保留在模型中?当你点击“更多”时,像facebook这样的东西。

换句话说,如何保留组件,同时保留当前内容,而不关心它?

注意:我正在寻找一般解决方案,不仅仅是表格。

更新:我可以写一些JavaScript。

更新:我想我可以 1)在ListView之后添加一些空组件 2)附加时,将其替换为新的ListView,然后添加另一个空。    不确定它是否可以在Wicket中实现。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以从AjaxFallbackDefaultDataTable

创建这样的转发器

答案 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);
}

}