2014-01-19 6 views
2

Я использую GWTP, я также использую NestedPresenter в виде parentPresenter (Ex: HeaderPage) и childPresenter (ContentPage). Я также хочу отправить информацию от parentPresenter до childPresenter (например: когда пользователь, входящий в HeaderPresenter, затем информация будет передана на childPresenter).В GWTP, в чем отличие onBind, prepareFromRequest, openInParent, onReveal, onReset в контексте Present-ChildPresenter? Очень Confused

Теперь я очень сбиваю с толку о различии между onBind, prepareFromRequest, opensInParent, onReveal, onReset.

Google сказал (https://code.google.com/p/gwt-platform/wiki/FrequentlyAskedQuestions#How_do_I_choose_between_onReveal()_and_onReset()?) «При первой загрузке onBind будет называться первым, тогда prepareFromRequest будет называться sencond, openInParent называется 3rd, затем onReveal, затем onReset».

Так вот список моих вопросов:

-Когда страницы, которые имеют заголовок & Содержание, затем цикл (onBind, prepareFromRequest, revealInParent, onReveal, OnReset) будет называться первый в родительском заголовка ведущего , то после этого весь тот же цикл (onBind, prepareFromRequest, discoveryInParent, onReveal, onReset) будет называться второй в дочернем или вложенном презентаторе контента?

or both parentPresenter & childPresenter пройти цикл самостоятельно?

Если они проходят цикл самостоятельно, у нас может возникнуть проблема. Ex, всякий раз, когда пользователь обновляет страницу (заголовок + контент), если заголовок уже проверял сеанс, то я хочу, чтобы заголовок передавал информацию о сеансе на страницу дочернего контента, но поскольку они проходят цикл независимо друг от друга, то как передается родительский презентатор когда дочерний ведущий не инициализирован?

Второй вопрос: как узнать, какой метод следует поместить в какой цикл?

ответ

3

Ваше веб-приложение можно увидеть как дерево презентаторов. Хождение по дереву от донизу, onBind будет называться каждым докладчиком. Как только все Ведущие будут связаны, onReveal будет вызываться на каждом презентаторе, начиная с сверху вниз дерева. Метод prepareFromRequest будет вызываться до onReveal.

Так, onBind будет называться первым на ChildPresenter, то onBind будет называться на ParentPresenter, то onReveal будет называться на ParentPresenter, и, наконец, onReveal будет называться на ChildPresenter.

Не исключено, что ChildPresenter не будет инициализирован, когда ParentPresenter проверит сеанс.

Для связи с ParentPresenter к ChildPresenter, я предлагаю 2 подхода:

  • Когда сеанс извлекалось ParentPresenter, ParentPresenter выстреливает SessionLoadedEvent через EventBus и ChildPresenter регистрирует на это событие и реагирует на это

  • Когда сеанс выбирается ParentPresenter, ParentPresenter напрямую вызывает childPresenter.onSessionFetched(sessionData).ChildPresenter сделает все, что захочет, с помощью sessionData внутри метода onSessionFetched.

Вы также можете увидеть это https://github.com/ArcBees/GWTP/wiki/Presenter-Lifecycle

+0

так я поставил метод, передавать информацию от родителя к ребенку в OnReset из ParentPresenter сов в то время onBind & onReveal уже не называется в childpresenter, так что никакого риска, что они r не инициализирован. Это правильно? – Tum

+0

Насколько я понимаю, ваш ParentPresenter - это заголовок вашего приложения. Так что это только будет показано однажды (исправьте меня, если я ошибаюсь). Получение сеанса пользователя будет выполняться внутри метода onReaveal ParentPresenter. – spg

+0

нет, он не будет работать должным образом. Скажем, у меня есть страница1 (header + content1), page2 (header + content2). если я получаю сессию в onReveal parentPresenter на стр. 1, то код работает нормально на странице1, но когда я открываю страницу2, заголовок в пейджере получает информацию о сеансе, но контент2 не получает информацию, которая должна быть передана из заголовка на стр. 2 – Tum

Смежные вопросы