com.google.gwt.uibinder.client.LazyDomElement Maven / Gradle / Ivy
/*
* Copyright 2011 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.uibinder.client;
import com.google.gwt.dom.client.Document;
import com.google.gwt.dom.client.Element;
/**
* Wraps a call to a DOM element. LazyDomElement can boost performance of html
* elements and delay calls to getElementById() to when the element is actually
* used. But note that it will throw a RuntimeException in case the element is
* accessed but not yet attached in the DOM tree.
*
* Usage example:
*
* Template:
*
* <gwt:HTMLPanel>
* <div ui:field="myDiv" />
* </gwt:HTMLPanel>
*
*
* Class:
*
* {@literal @}UiField LazyDomElement<DivElement> myDiv;
*
* public setText(String text) {
* myDiv.get().setInnerHtml(text);
* }
*
*
* @param the Element type associated
*/
public class LazyDomElement {
private T element;
private final String domId;
/**
* Creates an instance to fetch the element with the given id.
*/
public LazyDomElement(String domId) {
this.domId = domId;
}
/**
* Returns the dom element.
*
* @return the dom element
* @throws RuntimeException if the element cannot be found
*/
public T get() {
if (element == null) {
element = Document.get().getElementById(domId).cast();
if (element == null) {
throw new RuntimeException("Cannot find element with id \"" + domId
+ "\". Perhaps it is not attached to the document body.");
}
element.removeAttribute("id");
}
return element;
}
}