ui:binderコンポーネント内のいくつかのオブジェクトにアクセスしようとしていますが、夜に目を覚まし続ける厄介なコードを記述せずにeventBus、requestFactoryなどにアクセスする方法がわかりません(また、私は完全に新しいことに注意してくださいJAVA、背景はPerl / Python / PHPにあります)。
私のui.xmlファイル:
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:ig='urn:import:com.ig.client.scaffold.ui.widget'>
<ui:style>
...
</ui:style>
<g:HorizontalPanel>
...
</g:HorizontalPanel>
</ui:UiBinder>
この方法でeventBusを挿入すると、com.ig.client.scaffold.ui.widget.Rで失敗します。デフォルト(引数ゼロ)のコンストラクターはありません。
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
@Inject
public R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
}
したがって、エラーメッセージに従って、UIFactoryを作成すると、エラーが発生します...'{style.entityComponent}'>必要な属性がありません:eventBus Element ...( ui:binderスタイルシートのeventBus。
public class R extends Composite {
interface MyUiBinder extends UiBinder<Widget, R> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final EventBus eventBus;
@UiField SimplePanel fieldA, ...;
public @UiConstructor R(EventBus eventBus){
this.eventBus = eventBus;
initWidget(uiBinder.createAndBindUi(this));
}
@Inject
@UiFactory R makeR(){
return new R(eventBus);
}
}
過去数日間の読書と読書、さらに読書から、ui:binderウィジェットにバインドするビューでeventBus、requestFactory、historyControllerに直接アクセスする人を見たことがないため、おそらくベストプラクティスではないという結論に至りました。とりあえず。
オブジェクトがあるとしましょう。それをプロキシと呼びましょう。プロキシにはhandleButtonClickが含まれており、これがeventBus.doSomething()を呼び出します。このプロキシオブジェクトをインスタンス化することなく、またはすべてのウィジェットに渡すことなく、ui:binderウィジェットにリンクするにはどうすればよいですか?
インターフェイスでGINインジェクションを実行し、クラスRを介してそのインターフェイスを実装することは可能ですか?クラスRには、探しているオブジェクトが含まれていますか?
基本的にフロントエンドをROOによって作成された残りのサービスに接続できるサンプル(Java n00bが理解できる)を探すだけで、機能するソリューションはどれでも歓迎されます。
ありがとうJ