我正在开发一个使用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;
}
}
这会有用吗?有谁知道如何实现这个目标?
答案 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));
}
中执行这两项技巧。