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

时间:2015-04-30 08:08:35

标签: gwt gwtmockito

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

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

上面的第2行失败,“无法设置元素两次......”

我需要这个才能使用GwtMockito并测试需要创建TextBox的组件。

谢谢!

2 个答案:

答案 0 :(得分:3)

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);
    }
}

可以访问该方法。

答案 1 :(得分:2)

您似乎不得不求助于使用某种工厂:

public interface TextBoxFactory {
    TextBox wrap(Element element);
}

这将被注入到您的视图中,您将使用工厂将现有元素包装在TextBox中。当然,默认实现只需使用Baz建议的TextBox#wrap(Element)。出于测试目的,您将使用返回Mockito模拟的实现。

不是最漂亮的解决方案,但考虑到情况,我无法想到一个更清洁的"之一。