Domanda

Sto cercando di legare una vista GWT con il suo livello di presentazione, ma non sembra essere di fare qualsiasi cosa.

E 'un progetto generato primavera Roo GWT e sto cercando di utilizzare il patibolo data per quanto possibile. La vista è un semplice pulsante (R.ui.xml) e il resto della vista è definita in R.java:

public class R extends Composite implements RPresenter.Display {

    interface MyUiBinder extends UiBinder<Widget, R> {}
    private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);

    @UiField Button myButton;

    private ClickHandler buttonClickHandler = null;

    public R(){
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiHandler("myButton")
    void onButtonClick(ClickEvent event){
        GWT.log('Button clicked');
        if (buttonClickHandler != null){    
            GWT.log("buttonClickHandler event triggered");
            buttonClickHandler.onClick(event);
        }
    }

    @Override
    public void setButtonClickHandler(ClickHandler buttonClickHandler) {

        GWT.log("setButtonClickHandler");
        this.buttonClickHandler = buttonClickHandler;
    }

}

Il presentatore:

public class RPresenter {

    public interface Display extends IsWidget {
        void setButtonClickHandler(ClickHandler buttonClickHandler);
    }

    private final Display display;
    private final EventBus eventBus;

    @Inject
    public RPresenter(EventBus eventBus, Display display){
        this.display = display;
        this.eventBus = eventBus;
        bind();
    }

    private void bind(){
        display.setButtonClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                GWT.log("onClick event triggered");
            }
        });
    }

    public void go(HasWidgets container){
        container.add(display.asWidget());
    }

}

E per il mio modulo GIN Io uso lo ScaffoldModule generato nel ... pacchetto di client.scaffold.ioc:

public class ScaffoldModule extends AbstractGinModule {

    @Override
    protected void configure() {

        GWT.log("ScaffoldModule configure");

        bind(EventBus.class).to(SimpleEventBus.class).in(Singleton.class);
        bind(ApplicationRequestFactory.class).toProvider(RequestFactoryProvider.class).in(Singleton.class);
        bind(PlaceController.class).toProvider(PlaceControllerProvider.class).in(Singleton.class);

        //bind(RPresenter.Display.class).to(R.class).in(Singleton.class);
        bind(RPresenter.Display.class).to(R.class);
    }

    static class PlaceControllerProvider implements Provider<PlaceController> {

        private final EventBus eventBus;

        @Inject
        public PlaceControllerProvider(EventBus eventBus) {
            this.eventBus = eventBus;
        }

        public PlaceController get() {
            return new PlaceController(eventBus);
        }
    }

    static class RequestFactoryProvider implements Provider<ApplicationRequestFactory> {

        private final EventBus eventBus;

        @Inject
        public RequestFactoryProvider(EventBus eventBus) {
            this.eventBus = eventBus;
        }

        public ApplicationRequestFactory get() {
            ApplicationRequestFactory requestFactory = GWT.create(ApplicationRequestFactory.class);
            requestFactory.initialize(eventBus);
            return requestFactory;
        }
    }
}

Nella console di modalità di sviluppo GWT, il "ScaffoldModule configure" non viene mai visualizzato, ma l'impalcatura generato sembra vincolante bene come gli eventi vengono passati insieme da componente a componente senza intoppi, a meno che il legame è magicamente accadendo da qualche altra parte e cioè codice morto.

Quando ho messo la mia bind (RPresenter.Display.class) .to (R.class) in, non sembra di fare il legame. L'unica uscita ottengo nella console GWT è "Button cliccato" che si chiama nella vista e poi più nulla. Sto chiaramente manca qualcosa, qualche idea?

È stato utile?

Soluzione

La chiamata a GWT.log () tutto ciò che non sarà in uscita da un AbstractGinModule - classi che estendono AbstractGinModule (ScaffoldModule nella vostra situazione) sono utilizzati da gin in fase di compilazione per decidere quale implementazioni concrete da utilizzare per le interfacce iniettati. Dal resto della tua descrizione (vale a dire che gli spettacoli UI fino nell'applicazione) Sembra che l'iniezione di dipendenza funziona correttamente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top