GWT:小部件/模板和ClientBundle

时间:2012-04-26 08:34:33

标签: templates gwt widget clientbundle

允许使用Widget / Template和ClientBundle的哪些组合,并且在使用它们时应该考虑任何已知的限制/事项。

Afaik之类的东西:

@Template(""{0}\"<p>not allowed</p>")
SafeHtml iconONLY(Widget w);

是不允许的,因为它会抛出错误。

这样的东西
@Template("{0}<p>not allowed</p>")
SafeHtml iconONLY(Element e);

并且可以使用类似iconONLY(w.getElement());之类的东西,但是Widget会失去所有功能,因为它的attache方法没有正确执行。

总结一下,我假设模板不打算将Widgets放在其中!

ClientBundle旨在保存内容小部件。在其他元素中使用它们,例如:

@Template("{0}<p>not allowed</p>")
SafeHtml iconONLY(SafeUrl safeurl);
使用iconONLYimageResource.getSafeUrl);调用

可能会导致问题......

我的假设是否正确?如果您尝试/使用其中一种组合及其工作方式,请告诉我?

1 个答案:

答案 0 :(得分:1)

第一个和第二个有意义,它们不起作用,因为你试图只将元素或小部件插入一个字符串(SafeHtml在一天结束时只是一个字符串) - 当然事件接线不起作用。小部件不能像那样被克隆,它们只有它们所构成的元素。

最后一个是错误,因为你将Uri放入文本内容 - 你可能意味着像

@Template("<img src=\"{0}\" /><p>not allowed</p>")
SafeHtml iconONLY(SafeUri safeurl);

显示图像。

你想做什么?如果尝试显示图片,将SafeUri放在img标记中是一种选择,另一种选择是将SafeHtml实例放在一起插入:

@Template("{0}<p>not allowed<p>")
SafeHtml iconONLY(SafeHtml icon);

//...
AbstractImagePrototype proto = AbstractImagePrototype.create(icon);
SafeHtml iconHtml = SafeHtmlUtils.fromTrustedString(proto.getHTML());
template.iconONLY(iconHtml);

SafeHtml的基本思想是你建立html而不是dom元素的字符串 - 这允许重复使用这些字符串,或者一次注入所有字符串(这通常比将元素附加到dom更快) - 这不是小部件是如何相互添加的,并且尝试操作这样的小部件最终将会丢失,正如您所注意到的那样。