GWT&GIN:Uibinderを使用してPlaceControllerをウィジェットに注入する方法
-
12-10-2019 - |
質問
Uibinderで使用したInlinelabelサブクラスがあります。 WidgetをUibinderで使用できるように、Ginを介してPlacecontrollerを注入するにはどうすればよいですか? (UibinderにはNo-Argsコンストラクターが必要であることを思い出してください。)
それが不可能な場合、OnClick()イベント中にウィジェットで使用できるように、ウィジェットでPlaceControllerを使用できるようにする最もクリーンな方法は何ですか?
編集:
この場合、MVPが本当に最良の解決策であるかどうかはわかりません(しかし、あなたが私の考えを変えてくれてうれしいです。)
uibinder foo.ui.xmlファイルで宣言されているこれらのInlinelabelインスタンスの数十個があります。 MVPを実装した場合、これらのインスタンスのそれぞれを@Uifieldメンバーとして宣言することを意味します。私がそれらの多くを持っていると、それはかなり扱いにくいです。だからこそ、私は半自動化された方法でInlineLabelsのそれぞれにPlaceControllerを注入し、それらを手動でビューに配線することを避けることを望んでいました。
また、プレゼンターを各InlineLabelsに注入する方法があれば受け入れられます...その後、代表団は次のようなことをすることができます。
public class MyInlineLabelSubclass {
// ...
public void onClick(ClickEvent event)
{
presenter.labelClicked(this);
}
}
解決
使用できます @UiHandler
uibinder要素にハンドラーを追加するための注釈 @UiField
参照:
<ui:UiBinder>
<g:InlineLabel ui:field="name"/>
<g:InlineLabel ui:field="address"/>
<g:InlineLabel ui:field="zipCode"/>
</ui:UiBinder>
そして、見解では:
@UiHandler({"name","address","zipCode"})
void onClick(ClickEvent event) {
// Source will be one of the three InlineLabels.
presenter.labelClicked(event.getSource());
}
ウィジェットにPlaceControllerに直接ハンドルを与えないでください - ビューのプレゼンターに委任します(コールバックまたはプレゼンターインターフェイスを介して)。見る http://code.google.com/webtoolkit/doc/latest/devguidemvpactivitivitiesandplaces.html#views
他のヒント
PlaceControllerが使用している名前のTokensからハイパーリンクが直接構築されたオンラインの例を見てきました。例えば。
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<ui:with type="com.gwtplatform.samples.nested.client.NameTokens" field="nameTokens"></ui:with>
<g:HTMLPanel>
<g:InlineHyperlink targetHistoryToken="{nameTokens.getHomePage}">Home</g:InlineHyperlink> |
<g:InlineHyperlink targetHistoryToken="{nameTokens.getAboutUsPage}">About Us</g:InlineHyperlink> |
<g:InlineHyperlink targetHistoryToken="{nameTokens.getContactPage}">Contact</g:InlineHyperlink>
</g:HTMLPanel>
</ui:UiBinder>
この例の詳細については、こちらをご覧ください。
http://code.google.com/p/gwt-platform/wiki/simplenestedsample#step_3:_creating_a_custom_widget