2016-06-01 32 views
0

ich mit einer einzigen Eintrittspunkt Klasse ein Multi-Modul-Projekt am schaffen, sondern hat einige Probleme,Latente Bindung in Multi-Modul-Projekt und Fragen während EventBus Zugriff

Ich habe 2 Module wie: -

Diese mein Hauptmodul ist,

@ChildModule(moduleClass = MyChildModule.class) 
public class MyMainModule implements EntryPoint { 
    @Override 
    public void onModuleLoad() { 
    Mvp4gModule module = (Mvp4gModule) GWT.create(Mvp4gModule.class); 
    module.createAndStartModule(); 
    RootPanel.get().add((Widget) module.getStartView()); 
    } 
} 

und erstellt ein Kind Modul wie

public interface MyChildModule extends Mvp4gModule { 
} 

Mein Base EventBus ist,

@Events(startPresenter = HomePresenter.class,historyOnStart=true) 
@ChildModules(@ChildModule(moduleClass=MyChildModule.class, async=true, autoDisplay=false )) 
public interface BaseEventBus extends EventBusWithLookup { 

@InitHistory 
@Event(handlers = HomePresenter.class) 
void init(); 

@Start 
@Event(handlers = HomePresenter.class) 
void start(); 

@Event(forwardToModules=MyChildModule.class) 
void getContentBody(); 

@Event(handlers = HomePresenter.class) 
void setContentBody(ContentBodyView contentBodyView); 
} 

und Kind Eventbus ist,

@Events(module=MyChildModule.class, startPresenter = ContentBodyPresenter.class) 
public interface MyChildEventBus extends EventBusWithLookup { 


@Event(generate = ContentBodyPresenter.class) 
void getContentBody(); 

@Event(forwardToParent=true) 
void setContentBody(ContentBodyView contentBodyView); 
} 

HomePresenter, Homeview sind in MyMainModule und ContentBodyPresenter, ContentBodyView sind von MyChildModule.

@Presenter(view = HomeView.class) 
public class HomePresenter extends BasePresenter<HomeView, BaseEventBus>{ 

getErrorBtn().addClickHandler(new ClickHandler() { 

      @Override 
      public void onClick(ClickEvent arg0) { 
       eventBus.showError("Error"); 
      } 
     }); 
} 

die oben Moderator Zugriff BaseEventBus und ContentBodyPresenter ist als followa,

@Presenter(view = ContentBodyView.class) 
public class ContentBodyPresenter extends BasePresenter<ContentBodyView, MyChildEventBus>{ 

getErrorBtn().addClickHandler(new ClickHandler() { 

     @Override 
     public void onClick(ClickEvent arg0) { 
      eventBus.showError("Error"); 
     } 
    }); 
} 

hier, wenn ich EventBus zugreifen es noch BaseEventBus Veranstaltung Zugriff, wenn ich MyChildEventBus oben angegeben. Wieso ist es so.?

und ich erbte das MyChildModule in gwt.xml von MyMainModule wie

<inherits name='abc.xyz.MyChildModule' /> 

Wenn ich dieses Projekt kompilieren, sind immer latente Bindungsfehler für MyChildModule und Konsole zeigt Methode getContentBody: keine Instanz von Client .MyChildModule ist definiert. Hast du vergessen, es zu @ChildModules deiner Event-Bus-Schnittstelle hinzuzufügen?. Was kann das Problem sein? Gibt es einen strukturellen Fehler im obigen Code?

Antwort

0

im Code suchen Sie gebucht haben, gibt es zwei Dinge, die nicht notwendig sind:

  1. Es gibt keine Notwendigkeit, Ihre Entrypoint mit @ChildModule zu annotieren. Diese Annotation wird innerhalb Ihrer BaseEventBus-Klasse verwendet.

  2. Sie müssen das mvp4g-Kindmodul in Ihrem Moduldeskriptor nicht erben. Die Module von Mvp4g sind nicht von GWT-Modulen abhängig. Es ist etwas ganz anderes.

  3. Änderung @Event(generate = ContentBodyPresenter.class) zu @Event(handlers = ContentBodyPresenter.class)

+0

Also brauche ich eine einfache Klasse erstellen genannt MyChildModule.? –

+0

und wie kann ich auf das Kind eventBus zugreifen? –

+0

Sie müssen keine MyChildModule-Klasse erstellen. Das Framework kennt alles, was es benötigt. Siehe: https://github.com/mvp4g/mvp4g/wiki/05.-Code-splitting –