我想创建小部件,你可以注入一些uiBinder代码。 例如
<c:MyWidget title="Title text" type="SOME_TYPE">
<g:Button ... />
<g:HTMLPanel ... > ... </g:HTMLPanel>
</c:MyWidget>
我另外MyWidget本身就有uiBinder代码,如下:
<g:HTMLPanel>
<g:HTMLPanel styleName="...">SOME HEADER</g:HTMLPanel>
<g:HTMLPanel ui:field="mainBody"/>
<g:HTMLPanel styleName="...">SOME FOOTER</g:HTMLPanel>
</g:HTMLPanel>
并进入主体我想注入包裹的代码
到目前为止我做的是:
public class MyWidget extends Composite implements HasSafeHtml {
...
private static MyWidgetUiBinder uiBinder = GWT.create(MyWidgetUiBinder.class);
interface MyWidgetUiBinder extends UiBinder<Widget, MyWidget> {}
...
@Override
public void setHTML(String html) {
modalBody.getElement().setInnerHTML(html);
this.innerContent = html;
}
但它没有解析生成的代码,如按钮或htmlPanels,我只能插入纯HTML。
我也像上面那样做了
public class MyWidget extends HTMLPanel {
private static MyWidgetUiBinder uiBinder = GWT.create(MyWidgetUiBinder.class);
interface MyWidgetUiBinder extends UiBinder<Widget, MyWidget> {}
@UiConstructor
public ModalWindow(Type type, String title, String html) {
super(html);
...
但我甚至不知道如何从这个问题的第一个代码列表中捕获代码表单。我收到错误&#34;缺少必需的属性:html:&#34;
有人知道如何构建这样的组件吗?
答案 0 :(得分:2)
您只需要实现HasWidgets界面。在add()
方法中,将小部件插入mainBody
面板。
public class MyWidget extends Composite implements HasWidgets {
private static MyWidgetUiBinder uiBinder = GWT.create(MyWidgetUiBinder.class);
interface MyWidgetUiBinder extends UiBinder<Widget, MyWidget> {}
@UiField
HTMLPanel mainBody;
public MyWidget() {
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public void add(Widget w) {
mainBody.add(w);
}
@Override
public void clear() {
mainBody.clear();
}
@Override
public Iterator<Widget> iterator() {
return mainBody.iterator();
}
@Override
public boolean remove(Widget w) {
return mainBody.remove(w);
}
}
经测试,它有效。