1

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

这行得通吗?有人知道如何做到这一点吗?

4

1 回答 1

2

是的,它可以做到!

SomeWidget在 Singleton 中绑定你的类:

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

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

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

@UiField(provided = true)
SomeWidget someWidget;

并在调用之前将构造函数中的字段分配给initWidget

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

您还必须在FooView.

于 2013-07-30T11:58:03.220 回答