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