1

UIBinderで使用したInlineLabelサブクラスがあります。ウィジェットをUIBinderで使用できるように、GINを介してPlaceControllerを挿入するにはどうすればよいですか?(UIBinderには引数なしのコンストラクターが必要であることを思い出してください。)

それが不可能な場合、PlaceControllerをウィジェットで使用できるようにして、onClick()イベント中にウィジェットで使用できるようにする最もクリーンな方法は何ですか?

編集:

この場合、MVPが本当に最善の解決策であるかどうかはわかりません(ただし、考えを変えていただければ幸いです)。

UIBinderfoo.ui.xmlファイルでこれらのInlineLabelインスタンスを数十個宣言します。MVPを実装する場合、これは、これらの各インスタンスをビューで@UiFieldメンバーとして宣言することを意味します。私がそれらをたくさん持っているとき、それはかなり扱いにくいものになります。そのため、PlaceControllerを各InlineLabelに半自動で挿入し、手動でビューに接続する必要がないようにしたいと考えていました。

プレゼンターを各InlineLabelsに挿入する方法があれば、それも受け入れられます...その場合、委任は次のように実行できます。

   public class MyInlineLabelSubclass {
       // ...

       public void onClick(ClickEvent event)
       {
         presenter.labelClicked(this);
       }
    }
4

2 に答える 2

0

アノテーションを使用して、参照@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/DevGuideMvpActivitiesAndPlaces.html#Viewsを参照してください

于 2011-01-19T20:01:41.433 に答える
0

ハイパーリンクがPlaceControllerによって使用される名前トークンから直接構築された例をオンラインで見ました。例えば。

<!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

于 2011-10-11T12:51:33.743 に答える