4

テストの目的で、アプリケーションにログインするためにDialogBoxを使用したいと思います。

uibinderファイルは次のとおりです。

<!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:style>
  </ui:style>
    <g:HTMLPanel>
      <g:Label>Username</g:Label>
      <g:TextBox ui:field="username"></g:TextBox>
      <g:Label>Password</g:Label>
      <g:PasswordTextBox ui:field="password"></g:PasswordTextBox>
      <g:Button ui:field="login">Login</g:Button>
    </g:HTMLPanel>
</ui:UiBinder>

そして、これが私の実装です:

public class Login extends DialogBox {
    private static LoginUiBinder uiBinder = GWT.create(LoginUiBinder.class);

    interface LoginUiBinder extends UiBinder<Widget, Login> {}

    @UiField
    TextBox username;
    @UiField
    PasswordTextBox password;
    @UiField
    Button login;

    public Login() {
        setHTML("Login");
        setWidget(uiBinder.createAndBindUi(this));
    }
}

今私の質問は:これはそれを行う正しい方法ですか?ドキュメントには、この種のことを行う方法については何も書かれていないようです...

4

1 に答える 1

6

それが私がしていることであり、何ヶ月もの間、本番環境でうまく機能しています。理解して再利用するのはとても簡単です。

抽象メソッドonConfirmと組み込みの確認ボタンを備えた同じパターンで抽象ダイアログを作成しました。また、UiBinderにウィジェットを受け入れるパネルを含め、setWidget関数をオーバーライドしてウィジェットをその内部パネルに配置します。次に、何かのための新しいダイアログが必要なときはいつでも、次のように書くことができます。

final CustomWidget whicheverWidgetINeedRightNow = xyz;
CustomDialog dialog = new CustomDialog()
{
    @Override
    protected void onConfirm()
    {
        process(whicheverWidgetINeedRightNow.getData());
    }
};
dialog.setWidget(whicheverWidgetINeedRightNow);

テンプレートUiBinderの[OK]ボタンは、押されたときにonConfirmを呼び出すように配線されています。気の利いた!より複雑なケースでは、CustomDialogを独自の名前付きクラスにサブクラス化します。

私のアプリでは、おそらく5つか6つの異なる状況でうまく機能し、スタイルを変更したり、コードを変更したりする必要はありません。

于 2011-03-29T12:17:27.993 に答える