GWTP - 在另一个视图中注入小部件

时间:2013-07-30 01:10:23

标签: view inject gwtp

我正在开发一个使用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;
    }
}

这会有用吗?有谁知道如何实现这个目标?

1 个答案:

答案 0 :(得分:2)

是的,可以做到!

将您的SomeWidget课程绑定在Singleton:

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

因此两个视图将具有相同的SomeWidget实例。

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

@UiField(provided = true)
SomeWidget someWidget;

并在<{1}}的调用之前在构造函数中指定字段:

initWidget

您还必须在@Inject public PlayerView(Binder binder, SomeWidget someWidget) { this.someWidget = someWidget; initWidget(binder.createAndBindUi(this)); } 中执行这两项技巧。