使用UIbinder定义窗口小部件的可选参数

时间:2012-11-15 11:57:26

标签: gwt uibinder

以下问题的答案显示这是可能的:

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?

1 个答案:

答案 0 :(得分:1)

HTMLPanel有一个专门的HTMLPanelParser来处理来自ui.xml的元素。

元素解析器是UiBinder的内部部分,你不能add your own

你必须声明一个@UiConstructor构造函数,其余的由setter处理,最后的验证可能在onAttach中完成(类似于{{} 1}}在您忘记拨打Composite时会在附加时抛出,对initWidgetWidget也是如此。

在复杂的情况下,和/或如果您想强制使用构造函数参数,那么请不要执行任何特殊操作,并让窗口小部件的用户使用setElement@UiFactory。例如,@UiField(provided = true)SuggestBoxValueListBox已经是这种情况。

我个人的偏好是最后一种方法。