2011-01-19 8 views
1

私はUIBinderで使用したInlineLabelサブクラスを持っています。ウィジェットがUIBinderで使用できるように、PlaceControllerをGIN経由で挿入するにはどうすればいいですか?GWT&GIN:UIBinderを使用してPlaceControllerをウィジェットに挿入する方法

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

編集:

私はMVPは本当にこのケースで最適なソリューションですわからないんだけど、私は数十を持っています

(私はしかし、あなたが私の心を変え持って幸せですよ。)これらのInlineLabelインスタンスは、私のUIBinder foo.ui.xmlファイルで宣言されています。 MVPを実装すると、これらのインスタンスをビュー内の@UiFieldメンバーとして宣言することになります。私が非常に多くのことを持っていると、それはむしろ扱いにくくなります。そのため、半自動でInlineLabelsにPlaceControllerを挿入し、ビューに手動でワイヤリングする必要はありませんでした。

InlineLabelsのそれぞれにプレゼンターを注入する方法があった...その後、代表団は次のように何かに行うことができれば、それはまた、許容可能である:あなたが追加する@UiHandlerアノテーションを使用することができます

public class MyInlineLabelSubclass { 
     // ... 

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

あなたは私の変更の答えを参照してください、各InlineLabelの明示的な@UiFieldを持っている必要はありません。 –

答えて

0

<ui:UiBinder> 
    <g:InlineLabel ui:field="name"/> 
    <g:InlineLabel ui:field="address"/> 
    <g:InlineLabel ui:field="zipCode"/> 
</ui:UiBinder> 

とビューで:@UiField参照を持つことなく、UiBinderサンプルメッセージ要素にハンドラ

@UiHandler({"name","address","zipCode"}) 
void onClick(ClickEvent event) { 
    // Source will be one of the three InlineLabels. 
    presenter.labelClicked(event.getSource()); 
} 

PlaceControllerへの直接ハンドルをウィジェットに与えないでください。ビューのPresenterに委譲してください。コールバックまたはPresenterインターフェイス)。 http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html#Views

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

関連する問題