Frage

Ich habe eine InlineLabel Unterklasse, dass ich in UiBinder verwendet. Wie kann ich ein PlaceController hinein über GIN injizieren, so dass das Widget in UiBinder verwendet werden? (Man erinnere sich, dass UiBinder ein No-args Konstruktor erfordert.)

Wenn das nicht möglich ist, was ist der sauberste Weg einen PlaceController zur Verfügung ein machen Widget, so dass es durch das Widget bei onClick () Veranstaltungen genutzt werden kann?

Edit:

Ich bin nicht sicher, MVP ist wirklich die beste Lösung in diesem Fall (Ich bin glücklich, Sie zu haben, meine Meinung zu ändern, aber.)

werde ich in meiner UiBinder foo.ui.xml Datei deklariert Dutzende dieser InlineLabel Instanzen haben. Wenn ich implementieren MVP, das bedeutet, jede dieser Instanzen als @UiField Mitglieder in der Ansicht zu erklären. Das wird ziemlich unhandlich, wenn ich so viele von ihnen haben. Deshalb habe ich gehofft, wurde die PlaceController in jede der InlineLabels in einer halbautomatischen Weise zu injizieren, und vermeiden, dass sie manuell in die Ansicht verdrahten.

Es wäre auch akzeptabel, wenn es eine Möglichkeit gäbe, die Moderatorin in jede der InlineLabels zu injizieren ... dann könnte die Delegation wie etwas getan werden:

   public class MyInlineLabelSubclass {
       // ...

       public void onClick(ClickEvent event)
       {
         presenter.labelClicked(this);
       }
    }
War es hilfreich?

Lösung

Sie können die @UiHandler Anmerkung verwenden, um einen Handler zu einem UiBinder Elemente hinzuzufügen, ohne eine @UiField Referenz mit:

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

Und in der Ansicht:

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

Geben Sie nicht Ihrem Widget einen direkten Griff zu einem PlaceController - Delegierten der Ansicht des Vortragende (über einen Rückruf oder eine Presenter-Schnittstelle.). Siehe http://code.google.com/webtoolkit/doc/latest/ DevGuideMvpActivitiesAndPlaces.html # Ansichten

Andere Tipps

Ich habe ein Beispiel online gesehen, wo Hyperlinks wurden direkt aus dem Namen gebaut Token von den PlaceController verwendet. zB.

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

Sehen Sie hier für mehr auf dieses Beispiel:

http://code.google.com/p/ GWT-Plattform / wiki / SimpleNestedSample # Schritt_3: _Creating_a_custom_widget

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top