是否可以使用而不是构造函数来创建 TextBoxGWT.create
并包装现有的 HTML 元素?我试过了:
TextBox text=GWT.create(TextBox.class)
text.setElement(DOM.createInput()) (2)
以上在第 (2) 行失败,“无法设置元素两次 ...”
我需要这个才能使用 GwtMockito 并测试需要创建 TextBox 的组件。
谢谢!
是否可以使用而不是构造函数来创建 TextBoxGWT.create
并包装现有的 HTML 元素?我试过了:
TextBox text=GWT.create(TextBox.class)
text.setElement(DOM.createInput()) (2)
以上在第 (2) 行失败,“无法设置元素两次 ...”
我需要这个才能使用 GwtMockito 并测试需要创建 TextBox 的组件。
谢谢!
UIObject 有一个包保护的 replaceElement 方法,它可以做你喜欢做的事情。
在正确的包中构建一个包装器,如下所示:
package com.google.gwt.user.client.ui;
import com.google.gwt.dom.client.Element;
public class ElementReplace
{
public static void replaceElement(UIObject obj, Element elem)
{
obj.replaceElement(elem);
}
}
并且可以访问该方法。
看来您不得不求助于某种工厂:
public interface TextBoxFactory {
TextBox wrap(Element element);
}
这将被注入到您的视图中,您将使用工厂将现有元素包装在TextBox
. TextBox#wrap(Element)
正如 Baz 所建议的,默认实现当然只使用. 出于测试的目的,您将使用返回 Mockito 模拟的实现。
不是最漂亮的解决方案,但鉴于这种情况,我想不出一个“更清洁”的解决方案。