我正在尝试在 GWT 中掌握 UI Binder 的窍门。
到目前为止,我有一个基本的应用程序来显示带有一些示例数据的 DataGrid,并且可以在传统的 GWT 和 UIBinder 之间轻松切换。它在传统的 GWT 中正常工作,但在 UiBinder 中不能正常工作。
这是主要的 EntryPoint 类:
public class Main implements EntryPoint {
public void onModuleLoad() {
uiBinder(); //call either uiBinder() or gwt() here
}
/* Use UiBinder to display grid */
public void uiBinder() {
HelloWorld hello = new HelloWorld();
RootPanel.get("myid").add(hello);
}
/* Use traditional GWT to display grid */
public void gwt() {
DataGrid<Contact> grid = new DataGrid<Contact>();
GridInitializer.init(grid);
RootLayoutPanel.get().add(grid);
}
}
这是 UiBinder 使用的 HelloWorld.java:
public class HelloWorld extends Composite {
interface MyUiBinder extends UiBinder<Widget, HelloWorld> {}
private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
@UiField DataGrid<Contact> grid;
public HelloWorld() {
GridInitializer.init(grid);
initWidget(uiBinder.createAndBindUi(this));
}
}
GridInitializer 类设置网格列和示例数据。我没有错,因为如果我使用传统的 GWT,它会正确呈现。
这是 HelloWorld.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">
<g:DockLayoutPanel unit="EM">
<g:center>
<c:DataGrid ui:field='grid' />
</g:center>
</g:DockLayoutPanel>
</ui:UiBinder>
如果我使用 UI Binder,则根本不会显示任何内容。我不知所措。有什么建议么?