我正试图在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,则根本不显示任何内容。我不知所措。有什么建议吗?
答案 0 :(得分:4)
DataGrid(一个RequireSize
小部件)必须添加(必须是)ProvidesResize面板/小部件的子节点,或者必须明确调整大小。
因此,您必须设置DataGrid或其父组件的大小。此外,它还要求您的应用程序使用RootLayoutPanel。
答案 1 :(得分:0)
GridInitializer.init(grid);
initWidget(uiBinder.createAndBindUi(this));
到
initWidget(uiBinder.createAndBindUi(this));
GridInitializer.init(grid);
initWidget创建网格。见http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html#Hello_World
此外,您将在uiBinder()方法中将其添加到RootPanel而不是RootLayoutPanel。你确定myid存在吗? DockLayoutPanel有点矫枉过正,使用LayoutPanel。