SmartGWT,将HTML添加到HTMLPane

5

我目前正在使用SmartGWT进行工作,一直在试图找到一种方法来将像GWT标准VerticalPanel这样的面板包含到SmartGWT窗口中。选择VerticalPanel的原因是我可以将小部件附加到VerticalPanel对象上,而无需重新设置整个内容,例如:

HTMLPane hPaneObj = new HTMLPane();  
hPaneObj.setContents("Foo");

现在,我只能看到可以进行追加的操作如下:
hPaneObj.setContents(hPaneObj.getContents() + "Bar");

这不是我需要的。

在我添加了VerticalPanel之后,问题出现了,即使使用“setCanSelectText”方法并将参数设置为true,我也无法在窗口内选择任何文本。下面是我整理的一个简短示例:

 public void onModuleLoad() {
  Window theWindow = new Window();
  theWindow.setTitle("Good evening");
  theWindow.setWidth(500);
  theWindow.setHeight(500);
  theWindow.setCanSelectText(true);

  VerticalPanel vp = new VerticalPanel();
  vp.add(new HTML("foo"));
  vp.add(new HTML("bar"));
  theWindow.addItem(vp);
  Canvas canvas = new Canvas();
  canvas.addChild(theWindow);
  canvas.draw();
 }

我很惊讶HTMLPane不允许我在不重置整个内容的情况下追加内容。如果您有任何建议,将不胜感激,但是我需要能够向面板“添加”内容。我不太喜欢使用垂直面板的想法,但我需要找到一种方法来实现前面提到的功能或允许我让垂直面板可访问,即选择文本。非常感谢。Christopher.
3个回答

1

VerticalPanel 使用 html 的 table 来创建其内容,这在大多数情况下不是您想要的。通常,在 HTML 中不可能添加纯 HTML ,因为它类似于 XML 的性质。例如,如果您有以下 HTML:<div>some text</div>。如果要添加文本,则添加点必须相对于 div 标签,无法在 sometext 之间添加其他内容而不重新插入整个文本。

在您的情况下,您可能希望使用 FlowPanel(一个 div),并使用 InlineHTML(将 HTML 包装在 span 中)添加 HTML。如果您不希望包装 span,则必须像您的 HTMLPane 示例中那样重新插入文本。


谢谢您的建议,我在 Smart GWT 网站上询问后找到了解决方案。http://forums.smartclient.com/showthread.php?p=39351#post39351 - Christopher

1

你需要在正确的位置设置canSelectText,而不是在整个窗口上(这将包括标题和图标),而只是在允许选择的元素上。

所以有两个选项:

1)当您将普通的GWT小部件添加到SmartGWT容器时,它会自动包装为WidgetCanvas。您可以自己包装它并在WidgetCanvas上设置setCanSelectText()。

http://www.smartclient.com/smartgwtee/javadoc/com/smartgwt/client/widgets/WidgetCanvas.html

2) 子类化Canvas并重写getInnerHTML()方法,返回具有已知ID的DIV或其他元素,然后使用GWT的低级DOM操作API来操作其内容。


我在Smart GWT网站上提出了这个问题,并在那里得到了确切的答复。如果您是用户“isomorphic”,感谢您的帮助。 - Christopher
无论如何,谢谢!我可能在回复中听起来有点不感激,但这绝不是我的意图。 :) - Christopher
那是一个共享账户,但是没错,那次是我。无论如何,将答案标记为正确也不会有什么损失 :) - Charles Kendrick


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接