Gwt 使用UIbinder定义小部件的可选参数
以下问题的答案表明这是可能的: 如果在模板中声明Gwt 使用UIbinder定义小部件的可选参数,gwt,uibinder,Gwt,Uibinder,以下问题的答案表明这是可能的: 如果在模板中声明,则HTMLPanel将是最终结果中的元素,而不是默认的 HTMLPanel具有以下构造函数: public HTMLPanel(String tag, String html) 这个方法可能会调用它,但是如何调用呢?如果模板中没有标记属性,则使用的构造函数可能是: public HTMLPanel(String html) 我知道可以用@UiConstructor注释构造函数来创建一个具有模板中定义的参数的小部件,但是如何根据定义的属性更改
,则HTMLPanel将是最终结果中的
元素,而不是默认的
HTMLPanel具有以下构造函数:
public HTMLPanel(String tag, String html)
这个方法可能会调用它,但是如何调用呢?如果模板中没有标记属性,则使用的构造函数可能是:
public HTMLPanel(String html)
我知道可以用@UiConstructor
注释构造函数来创建一个具有模板中定义的参数的小部件,但是如何根据定义的属性更改构造函数呢
还有,
字符串html
是如何自动填充的?作为元素的内容,是否存在html属性的隐式定义?或者这是UIBinder仅针对HTMLPanel的非标准行为?HTMLPanel
有一个专用的HTMLPanelParser
,它处理来自ui.xml
的元素
元素解析器是UiBinder的内部部分,您不能
您必须声明一个@UiConstructor
构造函数,其余的由setter处理,最后的验证可能在onAttach
(类似于当您忘记调用initWidget
时,Composite
在附加时间抛出的方式,类似于Widget
和setElement
)
在复杂的情况下,和/或如果您想要强制使用构造函数参数,那么不要做任何特殊的事情,让小部件的用户使用@UiFactory
或@UiField(provided=true)
。例如SuggestBox
、ValueListBox
或CellList
就是这种情况
我个人倾向于最后一种方法