Pregunta

Tengo una subclase InlineLabel que he usado en UiBinder. ¿Cómo puedo inyectar un PlaceController en ella a través de GIN, de manera que el widget se puede utilizar en UiBinder? (Recordemos que UiBinder requiere un constructor sin args.)

Si eso no es posible, ¿cuál es la forma más limpia de hacer una PlaceController a disposición de un widget para que pueda ser utilizado por el widget durante onClick () eventos?

Editar

No estoy seguro de MVP es realmente la mejor solución en este caso (estoy feliz de tener que cambiar de opinión, sin embargo.)

tendrá docenas de estos casos InlineLabel declarados en mi archivo UiBinder foo.ui.xml. Si implemento MVP, lo que significa que declaran cada uno de estos casos como miembros @UiField en la vista. Eso hace más difícil de manejar cuando tengo tantos de ellos. Es por eso que estaba esperando para inyectar el PlaceController en cada uno de los InlineLabels de una manera semi-automática, y evitar tener que cablear ellos manualmente en la vista.

También sería aceptable si hubiera una manera de inyectar el presentador en cada uno de los InlineLabels ... a continuación, la delegación podría ser que se haga algo como:

   public class MyInlineLabelSubclass {
       // ...

       public void onClick(ClickEvent event)
       {
         presenter.labelClicked(this);
       }
    }
¿Fue útil?

Solución

Puede utilizar la anotación @UiHandler para agregar un controlador a un elemento UiBinder sin tener una referencia @UiField:

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

Y en la vista:

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

No le dé a su widget de un mango directo a una PlaceController - delegado al presentador de la vista (a través de una devolución de llamada o una interfaz de presentador.). Ver http://code.google.com/webtoolkit/doc/latest/ DevGuideMvpActivitiesAndPlaces.html # Vistas

Otros consejos

he visto un ejemplo en línea donde los hipervínculos se construyeron directamente de las fichas nombre utilizado por el PlaceController. por ejemplo.

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

Vea aquí para más información sobre este ejemplo:

http://code.google.com/p/ GWT-plataforma / wiki / SimpleNestedSample # Step_3: _Creating_a_custom_widget

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top