Wicket: компонент Repeater, который добавляет больше элементов при прокрутке вниз? - PullRequest
3 голосов
/ 04 августа 2011

Есть ли компонент повторителя, который добавит больше элементов через ajax при прокрутке вниз, но не сохранит все элементы в модели? Что-то вроде Facebook делает, когда вы нажимаете «Подробнее».

Другими словами, как я могу добавить компонент, оставляя текущий контент, не заботясь об этом?

Примечание: я ищу общее решение, а не только для таблиц.

Обновление: у меня все в порядке с необходимостью написать немного JavaScript.

Обновление: я думаю, что мог 1) Добавьте какой-нибудь пустой компонент после ListView 2) При добавлении замените его новым ListView и добавьте еще один пустой после этого. Не уверен, что это возможно в Wicket.

Ответы [ 3 ]

1 голос
/ 17 ноября 2011
0 голосов
/ 17 ноября 2011

Обновление: я думаю, что я мог бы 1) добавить какой-то пустой компонент после ListView 2) при добавлении заменить его новым ListView и добавить еще один пустой после этого. Не уверен, что это возможно в Wicket.

Звучит правильно. Для простой части («кнопка Дополнительно») просто создайте новую Panel, которая содержит RepeatingView, пустой WebMarkupContainer и AjaxLink (добавьте немного логики, если разрешено разбиение по страницам / видимая ссылка).

Теперь для onClick AjaxLink замените ваш 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);
}

}

0 голосов
/ 04 августа 2011

Вероятно, вы можете создать такой повторитель из AjaxFallbackDefaultDataTable

...