首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GIN & GWT:将表示层与视图绑定

GIN & GWT:将表示层与视图绑定
EN

Stack Overflow用户
提问于 2011-01-13 12:10:29
回答 1查看 1.3K关注 0票数 0

我试图将GWT视图与其表示层绑定,但它似乎什么也做不了。

这是一个Spring Roo GWT生成的项目,我正在尝试尽可能使用给定的脚手架。视图是一个简单的按钮(R.ui.xml),视图的其余部分在R.java中定义:

代码语言:javascript
复制
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;
    }

}

演示者:

代码语言:javascript
复制
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());
    }

}

对于我的GIN模块,我使用...client.scaffold.ioc包中生成的ScaffoldModule:

代码语言:javascript
复制
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).to(R.class)放进去时,它似乎不能进行绑定。我在GWT控制台中得到的唯一输出是"Button clicked“,它在视图中被调用,然后就什么都没有了。我显然漏掉了什么,有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-14 06:12:16

对GWT.log()的调用不会从AbstractGinModule输出任何东西- gin at compile time使用扩展AbstractGinModule的类(在您的情况下是ScaffoldModule)来决定将哪些具体实现用于注入的接口。从您描述的其余部分(即UI显示在应用程序中)可以看出,您的依赖项注入工作正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4676686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档