2011-11-14 10 views
6

En un proyecto gwt tengo un CellTree con celdas personalizadas. Para una prueba más fácil, me gustaría agregar ID para cada una de las celdas. sé que puedo hacerlo de esta manera:¿Cómo puedo agregar una identificación única a una celda personalizada?

@Override 
public void render(Context context,TreeElement value, SafeHtmlBuilder sb) {    
      if (value == null) {return;} 
      sb.appendHtmlConstant("<div id=\""+value.getID()+"\">" + 
             value.getName()) + "</div>"; 
} 

pero me gustaría usar algo similar a EnsureDebugID(), así que no tengo que quemar los identificadores en el código. ¿Hay una manera de hacer eso?

Respuesta

2

me gustaría hacer algo entre los dos de los enfoques antes mencionados. Definitivamente debe agregar un prefijo para asegurarse de que pueda identificar fácilmente las celdas durante la prueba, y también debe tomar el enfoque createUniqueId() en lugar de generar sus propios UUID que pueden ser más problemáticos.

@Override 
public void render(Context context, TreeElement value, SafeHtmlBuilder sb) {    
    if (value == null) {return;} 
    String id = Document.get().createUniqueId(); 
    sb.appendHtmlConstant("<div id=\"cell_"+id+"\">" + 
          value.getName()) + "</div>"; 
} 
0

Generalmente cuando hago este tipo de cosas le agrego un prefijo. ID = "sec_22" donde sec_ es el prefijo. Entonces sé que esa sección tiene algo único.

1

Puede utilizar

Document.get().createUniqueId(); 

Aquí la descripción:

/** 
    * Creates an identifier guaranteed to be unique within this document. 
    * 
    * This is useful for allocating element id's. 
    * 
    * @return a unique identifier 
    */ 
    public final native String createUniqueId() /*-{ 
    // In order to force uid's to be document-unique across multiple modules, 
    // we hang a counter from the document. 
    if (!this.gwt_uid) { 
     this.gwt_uid = 1; 
    } 

    return "gwt-uid-" + this.gwt_uid++; 
    }-*/; 
0

que querían establecer un ID a un TextCell y me ha gustado esta

import com.google.gwt.cell.client.TextCell; 
import com.google.gwt.core.client.GWT; 
import com.google.gwt.safehtml.client.SafeHtmlTemplates; 
import com.google.gwt.safehtml.shared.SafeHtml; 
import com.google.gwt.safehtml.shared.SafeHtmlBuilder; 

public class EnsuredDbgIdTextCell extends TextCell { 

    private static EnsuredDbgIdTextCellTemplate template = null; 

    public EnsuredDbgIdTextCell() { 
     super(); 
     if (template == null) { 
      template = GWT.create(EnsuredDbgIdTextCellTemplate.class); 
     } 
    } 

    public interface EnsuredDbgIdTextCellTemplate extends SafeHtmlTemplates { 
     @Template("<div id=\"{0}\" style=\"outline:none;\" tabindex=\"0\">{0}</div>") 
     SafeHtml withValueAsDebugId(String value); 
    } 

    @Override 
    public void render(Context context, SafeHtml value, SafeHtmlBuilder sb) { 
     if (value != null) { 
      sb.append(template.withValueAsDebugId(value.asString())); 
     } 
    } 

} 

que establecer el ID es igual al valor de texto.

Cuestiones relacionadas