在http://www.gwtproject.org/doc/latest/DevGuideUiBinder.html
中它声明要在uiBinder
模板中使用小部件:
它们必须是默认的可实例化的;也就是说,它们必须提供零参数构造函数。但是,有几种方法可以解决这个问题。除了共享资源实例下描述的
@UiFactory
和@UiField(provided = true)
机制之外,您还可以使用@UiConstructor
注释标记自己的小部件。
HTMLPanel
不会满足这些要求,但可以在UiBinder
模板中使用。怎么样?
答案 0 :(得分:1)
GWT中的一些内置小部件在UiBinder中具有自定义支持,以便他们可以完成工作。对于这些情况,特殊处理属性或元素(考虑<ui:with>
,<ui:field>
,当然还有<g:HTMLPanel>
等),以便使用uibinder。
HTMLPanel是一种特殊情况,它不能通过实现HasHtml
和HasWidgets
来存在,因为这些子窗口小部件需要在html结构内的某个点附加。因此,他们不是使用公共API(正如您在文档中找到的那样),而是作弊了。
最终结果是您无法在自己的代码中复制而无需实际分支uibinder并直接编辑它。这已经在其他项目中完成,但是当后来对UiBinder进行更改时会出现破坏的高风险,因此通常应该避免。
TL; DR:将HTMLPanel视为一种特殊情况,可以稍微弯曲规则以使其更有用。在您自己的代码中,尝试坚持使用UiFactory
/ UiConstructor
/ UiChild
注释,属性设置器,以及为子内容实现一个受支持的接口。