Gin&GWT:ビュー付きのバインディングプレゼンテーションレイヤー

StackOverflow https://stackoverflow.com/questions/4676686

  •  10-10-2019
  •  | 
  •  

質問

GWTビューをプレゼンテーションレイヤーでバインドしようとしていますが、何もしていないようです。

これは春のROO GWT生成プロジェクトであり、可能な限り与えられた足場を使用しようとしています。ビューは簡単なボタン(r.ui.xml)であり、残りのビューは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;
    }

}

プレゼンター:

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());
    }

}

そして、私のジンモジュールには、... client.scaffold.iocパッケージで生成されたscaffoldmoduleを使用します。

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;
        }
    }
}

GWT開発モードコンソールでは、「scaffoldmodule configure」は決して表示されませんが、生成された足場は、イベントが魔法のように他の場所で起こっていない限り、イベントがヒッチなしでコンポーネントからコンポーネントに渡されるにつれてうまく結合しているように見えます。コード。

バインド(rpresenter.display.class)を入れたとき(r.class)。 GWTコンソールで取得する唯一の出力は、「ボタンクリック」で、ビューで呼び出され、それ以上は何もありません。私は明らかに何かを見逃しています、何かアイデアはありますか?

役に立ちましたか?

解決

gwt.log()への呼び出しは、abstractginmodule- abstractginmoduleを拡張するクラス(あなたの状況ではscaffoldmodule)から何も出力しません。 コンパイル時に 注入されたインターフェイスに使用する具体的な実装を決定します。説明の残りの部分(つまり、UIがアプリケーションに表示される)から、依存関係の注入が正しく機能しているように見えます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top