のロケーション属性に提供できるもの
<c:SimplePager ui:field='pager' location='HERE' />
CENTERを試しましたが、機能しませんでした。経費サンプルアプリで、場所属性がないことがわかりましたが、代わりにUiBinderでの作成時に設定しました。しかし、それは必須の属性なので、私はそれを行うことができません。何をすべきか?
SimplePager.TextLocation
CENTER、LEFT、または RIGHT を指定する必要があります。
<c:SimplePager ui:field='pager' location='CENTER'/>
私が現時点で見ている唯一の解決策は、での作業@UiField(provided = true)
です。それが役立つかどうかはわかりませんが、とにかく以下の小さな例を確認してください。
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>
およびウィジェット:
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");
}
}
エラーを修正する Location のセッターがないため、SimplePager クラスは UiBinder によってインスタンス化できません。
変数を自動的にインスタンス化できるようにする @UiField(provided=true) に代わる方法は、ファクトリ メソッドを作成して、UiBinder の外部のページにインスタンス化の方法と、必要に応じてオブジェクトをセットアップする方法を指示することです。
@UiField SimplePager クラスに適用されるファクトリ メソッドの例を次に示します。@UiField(provided=true) は複数のさまざまなインスタンス化を処理しますが、変数がいつ使用されるかを気にする必要がないため、1 つの UiFactory が最も単純です。
@UiFactory SimplePager createSimplePager() {
return new SimplePager(TextLocation.CENTER);
}