GWT.create 并包装现有的 html 元素



是否可以使用 GWT.create 而不是构造函数创建一个文本框,并包装现有的 HTML 元素?我试过了:

TextBox text=GWT.create(TextBox.class)
text.setElement(DOM.createInput()) (2)

以上在第 (2) 行失败,"无法设置元素两次......"

我需要这个来使用 GwtMockito 并测试需要创建文本框的组件。

谢谢!

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 模拟的实现。

不是最漂亮的解决方案,但鉴于这种情况,我想不出一个"更干净"的解决方案。

最新更新