Как я могу добавить уникальный идентификатор в пользовательскую ячейку? - PullRequest
6 голосов
/ 14 ноября 2011

В проекте gwt у меня есть CellTree с пользовательскими ячейками. Для облегчения тестирования я хотел бы добавить идентификаторы для каждой ячейки. Я знаю, что могу сделать это так:

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

Но я бы хотел использовать что-то похожее на EnsureDebugID (), чтобы мне не приходилось записывать идентификаторы в коде. Есть ли способ сделать это?

Ответы [ 4 ]

2 голосов
/ 14 ноября 2011

Я бы сделал что-то между двумя вышеупомянутыми подходами. Вы должны обязательно добавить префикс, чтобы быть уверенным, что вы можете легко идентифицировать ячейки во время тестирования, а также использовать подход createUniqueId() вместо генерации собственных UUID, которые могут быть более проблематичными.

@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>"; 
}
1 голос
/ 14 ноября 2011

Вы можете использовать

Document.get().createUniqueId();

Вот описание:

/**
   * 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 голосов
/ 08 августа 2012

Я хотел установить идентификатор для TextCell, и я сделал это так

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

}

Я установил идентификатор, равный текстовому значению.

0 голосов
/ 14 ноября 2011

Обычно, когда я делаю такие вещи, я добавляю к ним префикс.поэтому ID = "sec_22", где sec_ - префикс.Тогда я знаю, что в этом разделе есть что-то уникальное.

...