【问题标题】:GWTP - Inject widget in another viewGWTP - 在另一个视图中注入小部件
【发布时间】:2013-07-30 01:10:22
【问题描述】:

我正在开发一个使用 GWTP 的项目,我想知道是否可以将视图的对象注入到另一个视图中。类似:

public class BarView extends ViewWithUiHandlers<BarUiHandlers> implements BarPresenter.BarView {    
    public interface Binder extends UiBinder<HTMLPanel, BarView> {
    }

    @UiField SomeWidget someWidget;

    @Inject
    public PlayerView(Binder binder) {
        initWidget(binder.createAndBindUi(this));
    }
}

public class FooView extends ViewWithUiHandlers<FooUiHandlers> implements FooPresenter.FooView {    
    public interface Binder extends UiBinder<HTMLPanel, FooView> {
    }

    SomeWidget someWidget;

    @Inject
    public PlayerView(Binder binder, SomeWidget someWidget) {
        initWidget(binder.createAndBindUi(this));
        this.someWidget = someWidget;
    }
}

这行得通吗?有人知道如何实现吗?

【问题讨论】:

    标签: view inject gwtp


    【解决方案1】:

    是的,可以做到!

    在 Singleton 中绑定你的 SomeWidget 类:

    bind(SomeWidget.class).in(Singleton.class);
    

    所以两个视图将具有相同的SomeWidget 实例。

    如果您的 SomeWidget 在 UiBinder 中使用(如在 BarView 中),您必须使用 @UiField(provided = true) 注释您的 SomeWidget 字段:

    @UiField(provided = true)
    SomeWidget someWidget;
    

    并在您的构造函数中分配字段调用initWidget

    @Inject
    public PlayerView(Binder binder, SomeWidget someWidget) {
        this.someWidget = someWidget;
        initWidget(binder.createAndBindUi(this));
    }
    

    您还必须在FooView 中完成这两个技巧。

    【讨论】:

    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 2012-08-05
    相关资源
    最近更新 更多