2016-06-09 1 views
1

Ich habe 2 Moderatoren/anzeigen. Rufen wir sie parent und child. parent Presenter ist ein Container (mit Steckplatzmechanismus) für den child Presenter. In der child Ansicht des Präsentators hat der Benutzer auf die Schaltfläche geklickt, und ich möchte diese Aktion in parent Presenter behandeln.GWTP erhalten Zugang von Kind Moderator/anzeigen zu übergeordnete Presenter/view

Wie kann ich das tun? Was ist der beste Ansatz? Sollte ich eine Art Event- und Eventhandler verwenden? Oder sollte ich dem anderen einen Moderator injizieren?

Bitte helfen.

Antwort

2

Beide sind möglich.

Für Veranstaltungen - GWTP haben eine vereinfachte Version der Ereignisse GWT:

public interface MyEventHandler extends EventHandler { 
    void onMyEvent(MyEvent event); 
} 

public class MyEvent extends GwtEvent<MyEventHandler> { 
    public static Type<MyEventHandler> TYPE = new Type<MyEventHandler>(); 
    private Object myData; 
    public Type<MyEventHandler> getAssociatedType() { 
     return TYPE; 
    } 
    protected void dispatch(MyEventHandler handler) { 
     handler.onMyEvent(this); 
    } 

    public MyEvent(Object myData) { 
     this.myData = myData; 
    } 
    /*The cool thing*/ 
    public static void fire(HasHandlers source, Object myData){ 
     source.fireEvent(new MyEvent(myData)); 
    } 
} 

Also in Ihrem Kind Präsentator Sie einfach tun:

MyEvent.fire(this, thatObjectYoudLikeToPass); 

und sie zu registrieren, in der Eltern, Sie würden entweder verwenden:

addRegisteredHandler(MyEvent.TYPE, handler); 

oder

addVisibleHandler(MyEvent.TYPE, handler); 

Wenn Sie möchten, dass es nur verarbeitet wird, wenn das übergeordnete Element sichtbar ist. Ich schlage vor, Sie yo diese Handler in onBind Methode der Moderator hinzufügen (vergessen Sie nicht zuerst super.onBind() aufrufen, wenn zwingende)

Für die Injektion: Einfach sicher machen:

  1. Ihre Eltern Moderator ist ein Singleton
  2. Kreisabhängigkeitsfehler in GIN Um zu vermeiden, verdrahte es nicht wie

    @Inject ParentPresenter Moderator;

statt es wie folgt tun:

@Inject 
Provider<ParentPresenter> presenterProvider; 

und greift es mit presenterProvider.get() in Ihrem Kind

+0

Wie sicher zu stellen, dass Eltern Moderator Singleton ist? Ich verbinde es so: 'bindPresenter (AppPresenter.class, AppPresenter.MyView.class, AppView.class, AppPresenter.MyProxy.class);' Ich kann als Singleton nur Widget binden. Ich habe auch in der Konfiguration: 'bind (AppView.Binder.class) .in (Singleton.class);' - aber das ist nur eine Ansicht. Kannst du helfen? – masterdany88

+0

Moderatoren sind standardmäßig Singleton. –

Verwandte Themen