Калитка: динамически добавлять контент без повторителя в AjaxRequestTarget

Я хочу большой список на моем экране, используя Wicket.

Список содержит Panelс большой функциональностью AJAX / JS. Список имеет тенденцию к увеличению, поэтому я строю некоторые ограничения, просто показывая первые 10 записей. Чтобы получить больше записей, пользователь должен нажать на ссылку "еще".

Тем не менее, предметы находятся в ListView (может быть любой повторитель). Если я хочу добавить элементы в ретранслятор, Wicket заставляет меня добавить ретранслятор в AjaxRequestTarget. Это приводит к полной перерисовке повторителя в браузере.

Я хочу предотвратить это. Я думаю, что смогу сделать это, сделав это полностью из jQuery / javascript; попросив, чтобы новые 10 записей были представлены в невидимом элементе div, а затем добавили их в мой список. Это кажется очень нечестивым.

Кто-нибудь может предложить лучший подход?

2 ответа

Решение

Я столкнулся с той же проблемой и смог решить ее только с помощью калитки: создать класс из GenericPanel (или просто Panel) который содержит:

  • IModel<Long> currentOffsetModel
  • ListView
  • AjaxLink
  • пустой div (или любой другой элемент-заполнитель) как WebmarkupContainer
  • LoadalbeDetechable Модель для загрузки списка для ListView, начиная с currentOffsetModel

В AjaxLink- onClick Метод, который вам нужно заменить заполнителем div новым объектом вашего пользовательского класса ("replaceWith"), установить видимость AjaxLink в false, а AjaxLink и новый объект - 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:

<Калитка: панель>



 Далее 

Почему бы не использовать PageableListView и PagingNavigator? Кажется, это делает именно то, что вы хотите.

Другие вопросы по тегам