【问题标题】:get widget by id in gwt通过gwt中的id获取小部件
【发布时间】:2011-10-31 17:36:56
【问题描述】:

我有一堆动态生成的 TextBox-es。在创建步骤中,我正在为它们分配 ID 属性。 例如

id = ...
Button b = new Button();
b.setText("add textbox");
b.addClickHandler(new Clickhandler() {
Textbox tb = new TextBox();
tb.getElement().setId(Integer.toString(id));
tb.setText("some text");
}
id += 1;

稍后我需要通过他们的 ID 访问他们,但我不能这样做。 我尝试使用 DOM 对象来获取小部件,但它产生了异常:

String id = "some id";
Element el = DOM.getElementById(id);
String value = el.getAttribute("value"); - this line produces an exception.

我也尝试过使用 el.getInnerText、el.getNodeValue - 不走运。我在 chrome 调试器中看到 - 文本框没有“值”属性。

【问题讨论】:

    标签: dom gwt


    【解决方案1】:

    您可以通过这种方式获取与元素关联的小部件:

    public static IsWidget getWidget(com.google.gwt.dom.client.Element element) {
        EventListener listener = DOM
                .getEventListener((com.google.gwt.dom.client.Element) element);
        // No listener attached to the element, so no widget exist for this
        // element
        if (listener == null) {
            return null;
        }
        if (listener instanceof Widget) {
            // GWT uses the widget as event listener
            return (Widget) listener;
        }
        return null;
    }
    

    【讨论】:

      【解决方案2】:

      既然您是在 gwt java 代码中构建您的文本框,为什么不将它们放入地图并稍后访问它们呢?

      【讨论】:

      • 我正在考虑它,但担心内存问题。这个方法我试过了,效果不错。
      【解决方案3】:

      要记住的一点是 HTML/DOM 中属性和属性之间的区别。在您的示例中,“值”是一个属性。你可以试试 Element#getPropertyString。过去,属性和属性可以互换使用,但在现代浏览器中,情况已不再如此。

      【讨论】:

      • 或者,将您的 Element 转换为 InputElement。这有一个 getValue() 方法。
      • 谢谢。但是我已经尝试了这两种方法,但它们都不起作用: Element el = DOM.getElementById(_s); InputElement ie = (InputElement) el;字符串测试 = ie.getValue(); - 产生和异常。
      猜你喜欢
      • 2013-03-10
      • 2011-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-17
      • 2023-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多