以下问题的答案显示这是可能的:
Trying to get UIBinder to give me a span not a div
如果您在模板中声明<g:HTMLPanel tag="span">
,那么HTMLPanel将是最终结果中的<span>
元素,而不是默认的<div>
。
HTMLPanel有这个构造函数:
public HTMLPanel(String tag, String html)
这可能是通过这种方法调用的,但是如何?如果模板中没有tag属性,那么使用的构造函数可能就是这个:
public HTMLPanel(String html)
我理解可以使用@UiConstructor
注释构造函数来创建一个包含模板中定义的参数的窗口小部件,但是如何根据定义的属性更改构造函数呢?
此外,String html
如何自动填充?是否会有一些html属性的隐式定义作为元素的内容?或者这是UIBinder的非标准行为,仅适用于HTMLPanel?
答案 0 :(得分:1)
HTMLPanel
有一个专门的HTMLPanelParser
来处理来自ui.xml
的元素。
元素解析器是UiBinder的内部部分,你不能add your own。
你必须声明一个@UiConstructor
构造函数,其余的由setter处理,最后的验证可能在onAttach
中完成(类似于{{} 1}}在您忘记拨打Composite
时会在附加时抛出,对initWidget
和Widget
也是如此。
在复杂的情况下,和/或如果您想强制使用构造函数参数,那么请不要执行任何特殊操作,并让窗口小部件的用户使用setElement
或@UiFactory
。例如,@UiField(provided = true)
,SuggestBox
或ValueListBox
已经是这种情况。
我个人的偏好是最后一种方法。