gwtp使用DOM访问uibinder输入,div,span

时间:2014-01-18 01:38:32

标签: dom gwt uibinder gwtp

我想在演示者中使用DOM或文档界面访问uibinders中的元素,是否可能。

想要获取元素并将处理程序附加到它。

我在uibinders中有输入,选择,div,span元素。是否有可能实现。

我试图使用DOM和Document它返回null。

    <g:HTMLPanel styleName="{style.content1}" ui:field="containerPanel1">
        <div class="{style.rightAlign}" id="container">
            <g:FormPanel styleName="{style.formLayout}" ui:field="formPanel1">
                <g:HTMLPanel width="100%" height="100%">
                    <div id="inner" class="{style.horiCon}">
                        <div class="{style.label}">
                            <ui:msg key="name" description="Name of the user">Name</ui:msg>
                        </div>
                        <input type="text" id="firstName" name="name"
                            placeholder="FirstName" class="{style.textboxFirstName}" />
                        <input type="text" id="lastName" placeholder="LastName"
                            name="name" class="{style.textboxLastName}" />
                        <span id="nameError" class="{style.errorMsgHide}">Error</span>
                    </div>
                </g:HTMLPanel>
            </g:FormPanel>
        </div>
    </g:HTMLPanel>

演示

@Override
protected void onBind() {
    super.onBind();
        Window.alert("" + DOM.getElementById("firstName"));
                // returns null;
}

@Override
protected void onReveal() {
    super.onReveal();
    Window.alert("" + DOM.getElementById("firstName"));
                // returns <input class="GG1RCY0BHB" id="firstName" name="name" placeholder="FirstName" type="text">
}

Onbind()返回null,onreveal()返回

之后我做

TextBox.wrap(DOM.getElementById("firstName"));

我正在

java.lang.AssertionError: A widget that has an existing parent widget may not be added to the detach list
    at com.google.gwt.user.client.ui.RootPanel.detachOnWindowClose(RootPanel.java:136)
    at com.google.gwt.user.client.ui.TextBox.wrap(TextBox.java:69)

问题是什么?我可以在演示者中使用Rootpanel来获取参考吗? 请帮帮我。

先谢谢, 何。

1 个答案:

答案 0 :(得分:0)

要访问DOM元素,首先需要将元素附加到DOM,否则它将返回null。您可以在DOM.getElementByID("id") java类中使用onLoad()覆盖ui-binder方法。

@Override
void onLoad()
{
    DOM.getElementByID("id");
}

你提到uibinders中的输入,选择,div,span元素。为什么不使用ui:field并直接访问该字段来添加处理程序等?只是一个想法。 选择GWT ListBox FlowPanel同样是div。