0

我有两个问题。

问题 #1。这个问题(帖子标题)直接来自@Cataclysm 对此处第一个答案的最后评论:

dataGrid = new DataGrid<T>(pageSize, resource),如何为 UIBinder 设置 CSS 资源?

我正在尝试设置 UIBinder 中定义的 DataGrid 的样式:

<g:south size="400">
    <c:DataGrid ui:field="documentDataTable" />
</g:south>

使用此 ClientBundle 接口代码:

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.cellview.client.DataGrid.Resources;
import com.google.gwt.user.cellview.client.DataGrid.Style;

/**
 * Resources = "DataGrid.Resources"
 * Style     = "DataGrid.Style"
 * 
 * http://federico.defaveri.org/?p=157
 * https://code.google.com/p/google-web-toolkit/issues/detail?id=6144#c3
 * https://stackoverflow.com/questions/7394151/datagrid-celltable-styling-frustration-overriding-row-styles/7395175#comment26605442_7395175
 */
public interface CustomDataGridResource extends Resources {

    @Source({Style.DEFAULT_CSS, "css/CDD_DataGridStyle.css"})
    CustomStyle dataGridStyle();

    interface CustomStyle extends Style {
        String dataGridHeader();
    }
}

并且CDD_DataGridStyle.css

.dataGridHeader {
    background-color: purple;
}

使用这些参考:

  1. DataGrid / CellTable 样式受挫——覆盖行样式
  2. http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/cellview/client/DataGrid.html
  3. http://www.gwtproject.org/javadoc/latest/com/google/gwt/user/cellview/client/DataGrid.Style.html
  4. http://crazygui.wordpress.com/2011/11/01/how-to-skin-a-gwt-celltable/
  5. https://code.google.com/p/google-web-toolkit/issues/detail?id=6144#c3

根据我对参考 1 的回答的理解,这个资源样式表不像普通的客户端包那样“注入”,而是应该作为资源传递给以编程方式实例化的数据网格:

“要构建新样式的数据网格,您需要做的就是:

DataGridResource resource = GWT.create(DataGridResource.class);
dataGrid = new DataGrid<T>(pageSize, resource)"

奇怪的是,虽然我引用了,但API 文档DataGrid @UIField中似乎没有任何方法可以“设置”资源(因此,这个问题是对关于UIBinder 中已经定义的这个问题的最后评论的重新发布—— DataGrid/CellTable 样式受挫——覆盖行样式)。DataGrid.java DataGrid


DataGrid问题 #2: vs.之间有什么区别CellTable,正确的实现语法是什么?

为什么DataGrid.java(参考 2)的 Google GWT API 文档仅以CellTable编程方式详细说明实例化?我理解DataGrid.java扩展AbstractCellTable.java,但为什么不在DataGridAPI 示例代码中使用七个构造函数中的任何一个?

更令人困惑的是,参考文献 4 和 5 建议我的客户端捆绑接口应该扩展CellTable.Resources,而参考文献 1 建议扩展DataGrid.Resources(另请参阅此链接: http: //federico.defaveri.org/?p=157)。

我尝试改编参考 5中上一篇文章(#13)中的“After”代码示例,但嵌套接口引发了错误:

public interface NxoCellTableResources extends CellTable.Resources {
    public interface NormalStyle extends CellTable.Style {}

    @Source({ CellTable.Style.DEFAULT_CSS, "NxoCellTable.css" })
    public NormalStyle cellTableStyle();
}

public interface NxoCellTableThinResources extends CellTable.Resources {
    public interface ThinStyle extends CellTable.Style {}

    @Source({ CellTable.Style.DEFAULT_CSS, "NxoCellTable.css", "NxoCellTableThin.css" })
    public ThinStyle cellTableStyle();
}

总之,我正在寻找最简单的方法来设置 UIBinder 中定义的 DataGrid 中的所有元素的样式,并清楚地说明要使用哪种资源语法(DataGrid 与 CellTable)。我愿意从 UIBinder 中删除引用并在必要时以编程方式插入到视图中,在此先感谢!

4

2 回答 2

1

GWT在此处记录了这一点。

一个很好的例子可以在这里找到。

于 2014-07-23T07:58:28.857 回答
1

问题一:

你说的一切,都是正确的。

确保您传递provided=true给您的 DataGrid 的UiField

@UiField(provided = true)
DataGrid<MyDTO> dataGrid;

然后在构造函数中你会创建DataGrid这样的:

public MyView() {
   CustomDataGridResource resource = GWT.create(CustomDataGridResource.class);
   resource.dataGridStyle().ensureInjected();
   dataGrid = new DataGrid<MyDTO>(pageSize, resource)"
   binder.createAndBindUi(this);
} 

确保你调用ensureInjected()风格。另外,如果您Inject的构造函数上有一个。您可以传递 CustomDataGridresourceGWT.create()并将被自动调用:

@Inject
public MyView(CustomDataGridResource resource) {
   resource.dataGridStyle().ensureInjected();
   dataGrid = new DataGrid<MyDTO>(pageSize, resource)"
   binder.createAndBindUi(this);
} 

问题2:关于和参考这个线程
的区别:CellTableDataGrid

https://groups.google.com/forum/#!topic/google-web-toolkit/PBhu6RtP4G8

基本上,如果您使用LayoutPanels DataGrid它是一个很好的选择,因为它包含固定的标题和可滚动的内容区域。CellTable也可以FlowPanel正常工作Panels

于 2014-07-23T10:10:56.737 回答