Калитка: AjaxRequestTarget vs onModelChanged - PullRequest
0 голосов
/ 05 ноября 2018

Я работаю над кодом в проекте калитки, где оригинальные разработчики довольно часто использовали метод onModelChanged() в методах обработки запросов Ajax. Я, например, не сильно верю в эту реализацию.

На самом деле, я не могу вспомнить ни одного примера, где вызов target.add(...) уступает вызову метода onModelChanged.

Мне не хватает некоторых ключевых понятий здесь?

Пример:

public MyComponent extends Panel {

    public MyComponent(String id, Component... componentsToRefresh) {

        add(new AjaxLink<Void>("someId") {
            @Override
            public void onClick(AjaxRequestTarget target) {
                // some logic with model change

                for(Component c: componentsToRefresh) {
                    c.modelChanged();
                }

                target.add(componentsToRefresh);
            }
        };
    }
}

Теперь есть пара вещей, с которыми я не согласен, самый первый - это параметр componentToRefresh, второй - (как предполагает вопрос) тот факт, что мы вызвали c.modelChanged() для всех компонентов в этом массиве. , Я предполагаю, что это совершенно не нужно, и вместо параметра в конструкторе нужно просто написать пустую функцию в MyComponent и переопределить ее, а также при необходимости поместить туда необходимые компоненты.

1 Ответ

0 голосов
/ 05 ноября 2018

Я бы предложил использовать вместо этого систему Wicket Event. То есть при каждом нажатии AjaxLink вы будете транслировать событие:

send(getPage(), Broadcast.BREATH, new MyEventPayload(target));

Это будет транслировать событие на текущую страницу и все ее компоненты.

Тогда в любом из ваших компонентов вы можете прослушивать события:

@Override
public void onEvent(IEvent event) {
  Object payload = event.getPayload();
  if (payload instanceof MyEventPayload) {
    ((MyEventPayload) payload).getTarget().add(this); // or any of my sub-components
    event.stop(); // optionally you can stop the broadcasting
  }
}

Таким образом, вы не соединяете несвязанные компоненты в вашем приложении.

Подробнее см. Wicket Guide .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...