Pregunta

¿Qué se puede proporcionar al atributo de ubicación de un

<c:SimplePager ui:field='pager' location='HERE' /> 

Intenté el centro, pero no funcionó, veo en la aplicación de muestra de gastos que no tienen un atributo de ubicación, sino que lo configuran en la creación de él en la UIBinder. Pero no puedo hacer eso ya que es un atributo requerido. ¿Qué hacer?

¿Fue útil?

Solución

Debes proveer SimplePager.TextLocation, que puede ser centro, izquierda o derecha.

<c:SimplePager ui:field='pager' location='CENTER'/>

Otros consejos

La única solución que veo en este momento es trabajar @UiField(provided = true). No estoy seguro si eso es de alguna ayuda, pero de todos modos consulte el pequeño ejemplo a continuación.

El ui.xml:

<!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"
    xmlns:c="urn:import:com.google.gwt.user.cellview.client">
    <ui:style>

    </ui:style>
    <g:HTMLPanel>
        <c:CellList ui:field="list" />
        <c:SimplePager ui:field="pager" />
        <g:Button ui:field="more" text="addMore" />
    </g:HTMLPanel>
</ui:UiBinder>

y el widget:

public class TestView extends Composite {

    private static TestViewUiBinder uiBinder = GWT.create(TestViewUiBinder.class);

    interface TestViewUiBinder extends UiBinder<Widget, TestView> {}

    @UiField(provided = true)
    CellList<String> list;
    @UiField(provided = true)
    SimplePager pager;
    @UiField
    Button more;
    private int counter = 0;
    private ListDataProvider<String> provider;

    public TestView() {
        list = new CellList<String>(new TextCell());
        pager = new SimplePager();
        initWidget(uiBinder.createAndBindUi(this));
        provider = new ListDataProvider<String>(getList());
        provider.addDataDisplay(list);
        pager.setDisplay(list);
        pager.setPageSize(5);
    }

    private LinkedList<String> getList() {
        LinkedList<String> list = new LinkedList<String>();
        list.add("1st");
        list.add("2nd");
        list.add("3rd");
        list.add("4th");
        list.add("5th");
        return list;
    }

    @UiHandler("more")
    void onMoreClick(ClickEvent event) {
        provider.getList().add(++counter + " more");
    }
}

Uibinder no puede instanciar la clase SimplePager, porque no tiene un setter para la ubicación para corregir el error.

Una alternativa a @uifield (proporcionada = true), que permite instanciar automáticamente la variable es crear un método de fábrica para instruir a la página fuera de Uibinder sobre cómo instanciar y, si es necesario, configurar el objeto.

Aquí hay un ejemplo del método de fábrica que se aplicará a cualquier clase de @uifield simplepager. @Uifield (proporcionando = true) manejaría múltiples instancias variables, pero para un uifactorio es el más simple, porque no tiene que preocuparse por cuándo se usa la variable.

@UiFactory SimplePager createSimplePager() {
    return new SimplePager(TextLocation.CENTER);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top