Сохранение состояния навигации / истории в GWT с шаблоном MVP - PullRequest
3 голосов
/ 09 декабря 2010

Я реализовал базовое приложение GWT на основе паттерна MVP , который рекомендует Google. То, что я пытаюсь выяснить, - это лучший способ сохранить состояние навигации / истории, как только вы заполните свое приложение данными.

Допустим, у вас есть поиск, который возвращает набор данных в CellTable. Если я перемещаюсь к определенному элементу в результатах поиска на другую панель, исходная панель с результатами поиска исчезает, если только презентация / представление не сохранены где-либо, поэтому я легко могу получить к ней доступ при обратной навигации.

Итак, мой вопрос: что делают такие приложения, как Gmail, чтобы сохранить состояние для обратной навигации? Есть ли примеры того, как это можно реализовать?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Gmail не использует GWT, поэтому я предполагаю, что вы просто хотите получить ответ высокого уровня.

Gmail использует фрагмент URL (часть после #). Перемещаясь по Gmail, вы заметите, что фрагмент меняется на уникальный идентификатор для каждого «местоположения» в навигации Gmail. Использование фрагмента заставляет браузер выполнять все отслеживание за вас, не требуя перезагрузки страницы. Затем вы просто отслеживаете фрагмент, а когда он меняется, вы переходите к указанному местоположению.

1 голос
/ 10 декабря 2010

Где вы создаете деятельность? Вы должны возвращать существующее действие вместо создания нового каждый раз, когда место меняется. Действия обычно создаются в ActivityMapper. У вас есть два варианта:

  1. Измените ActivityMapper, чтобы он создавал экземпляр Activity при первом вызове и возвращал этот экземпляр при последующих вызовах. Или

  2. Используйте CachingActivityMapper, чтобы обернуть ActivityMapper. Он вернет существующий Activity вместо создания нового.

1 голос
/ 09 декабря 2010

Существует несколько библиотечных проектов MVP для GWT, которые используют концепцию Места для представления состояния докладчиков. Реализации размещения обычно отображают состояние на фрагмент URL после #. Следовательно, они работают аналогично обработке состояния Gmail.

Например, при использовании проекта gwt-Presenter у вас могут быть DataPresenter и DataPlace:

public class DataPlace extends ProvidedPresenterPlace<DataPresenter> {

@Inject
public DataPlace(Provider<DataPresenter> presenter) {
    super(presenter);
}

@Override
public String getName() {
    return "data";
}

@Override
protected void preparePresenter( PlaceRequest request, DataPresenter presenter ) {
    String state = request.getParameter("state", null);
    if (state != null) {
        // set the presenter state
        presenter.setState(State.valueOf(state));
    }
}

@Override
protected PlaceRequest prepareRequest( PlaceRequest request, DataPresenter presenter ) {
    return request.with("state", presenter.getState().toString());
}
}

Когда URL имеет форму / data # state = 12345, это место будет предложено подготовить докладчика на основе параметров. После этого будет открыт метод открытия в Presenter. Поскольку состояние уже было подготовлено Местом, вы сможете восстановить представление по мере необходимости.

...