Архитектура MVP4G, свой класс и обращение к eventbus из него

231 views
Skip to first unread message

Алексей Мельников

unread,
Sep 20, 2011, 3:42:18 AM9/20/11
to Google Web Toolkit на русском
Есть форма на которую создаются экземпляры моего класса. Класс описан
вне кода формы и основан на простом виджете GWT, т.е. не имеет
презентеров.
Хочу сделать чтобы по событию вызванному классом форме передавались
некие данные. как это правильно делать?
Правильно ли я понял что передача данных между модулями осуществляется
через eventBus? но мой класс не видит его напрямую.

Сергей Прокопович

unread,
Oct 2, 2011, 1:31:48 AM10/2/11
to Google Web Toolkit на русском
Можна создать синглтон-холдер и доставать EventBus оттуда.

shaman.sir

unread,
Oct 8, 2011, 8:50:08 AM10/8/11
to google-web...@googlegroups.com
В mvp4g каждое событие должно быть привязано к экземляру Presenter (в новых версиях появились исключения, например можно рассылать события классам реализующим определённый интерфейс, см. аннотацию @Event + broadcastTo), поэтому самый правильный способ в данном случае – обернуть ваш виджет в пару view-presenter (инкапсулировать во view или сделать его сам отдельным view) или внедрить его создание в какой-то из существующих view. 

Алексей Мельников

unread,
Oct 8, 2011, 4:37:38 AM10/8/11
to Google Web Toolkit на русском
Сергей, не могли бы вы привести пример?

Я начинал вот с такого:

из presenter модуля создается мой класс
private void addClass() {
MyClass myClass = new MyClass()
}


в классе что нибуть типа:
public class MyClass extends xxx{

x.addClickHandler(new ClickHandler(){
@Override
public void onClick(ClickEvent event) {
eventBus.SendToModule(x.id)
}
}

Как уже писал, eventBus отсюда не вызывается.

Алексей Мельников

unread,
Oct 8, 2011, 1:25:46 PM10/8/11
to google-web...@googlegroups.com
Собственно это и было первое и второе что я сделал.
public class MyClass extends ReverseCompositeView<MyClassPresenter>  implements IMyClass{
 public MyClass(int ID){
....
presenter.sendID(id); // Вот тут то вылазеет ошибка - presenter этого класса(его экземпляра)=null
}
}

Как быть?

shaman.sir

unread,
Oct 9, 2011, 7:52:55 AM10/9/11
to google-web...@googlegroups.com
мм, а что за ReverseCompositeView? Если он имплементит ReverseViewInterface, то в этом интерфейсе есть метод setPresenter: http://code.google.com/p/mvp4g/source/browse/trunk/sources/src/main/java/com/mvp4g/client/view/ReverseViewInterface.java Я ещё не использовал Reverse View, но думаю что в конструкторе presenter он может быть ещё не доступен. 

Другое дело, что, если делать "правильно", думаю надо сначала загрузить/подготовить модель данных в презентере и оттуда передавать во view (я про ID). Шина событий – инструмент общения между презентерами, а те уже распределяют что надо сделать в своих View.

Алексей Мельников

unread,
Oct 9, 2011, 9:25:03 AM10/9/11
to Google Web Toolkit на русском
On 9 окт, 17:52, "shaman.sir" <shaman....@gmail.com> wrote:
> мм, а что за ReverseCompositeView? Если он имплементит ReverseViewInterface,
> то в этом интерфейсе есть метод setPresenter:http://code.google.com/p/mvp4g/source/browse/trunk/sources/src/main/j...

Да, именно он. Но судя по всему для моего класса, в отличии от всех
остальных модулей, setPresenter не вызывается.


> Я ещё не использовал Reverse View, но думаю что в конструкторе presenter он
> может быть ещё не доступен.

> Другое дело, что, если делать "правильно", думаю надо сначала
> загрузить/подготовить модель данных в презентере и оттуда передавать во view

> (я про ID). Шина событий - инструмент общения между презентерами, а те уже


> распределяют что надо сделать в своих View.

Согласен.

Reply all
Reply to author
Forward
0 new messages