带有内部 uiBinder 代码的小部件
Widget with internal uiBinder code
我想创建小部件,您可以在其中注入部分 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;
}
但它不会解析生成的代码,例如按钮或 html 面板我只能插入纯 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);
...
但我什至不知道如何从这个问题的第一个代码列表中捕获代码形式。我遇到错误 "missing required attribute(s): html:"
有人知道如何构建这样的组件吗?
你只需要实现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);
}
}
已测试,有效。
我想创建小部件,您可以在其中注入部分 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;
}
但它不会解析生成的代码,例如按钮或 html 面板我只能插入纯 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);
...
但我什至不知道如何从这个问题的第一个代码列表中捕获代码形式。我遇到错误 "missing required attribute(s): html:"
有人知道如何构建这样的组件吗?
你只需要实现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);
}
}
已测试,有效。