允许使用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);
调用可能会导致问题......
我的假设是否正确?如果您尝试/使用其中一种组合及其工作方式,请告诉我?
答案 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更快) - 这不是小部件是如何相互添加的,并且尝试操作这样的小部件最终将会丢失,正如您所注意到的那样。