Стиль отдельных ячеек в CellTable с использованием CSSResources - PullRequest
0 голосов
/ 13 января 2012

По сути, я хочу реализовать нечто подобное окраске ячеек, определенной в документации GWT

Однако я не хочу указывать стиль непосредственно в элементе DIVно я хочу присвоить скрытое имя стилей из моего пользовательского CSSResource, которое я определил для моего CellTable.

Вот код:

Я определил пользовательский Resources интерфейс для моего CellTable:

public interface CellTableResources extends Resources {

    @Source({CellTable.Style.DEFAULT_CSS,CellTableStyle.STYLE})
    CellTableStyle cellTableStyle();

    public interface CellTableStyle extends Style {
        String STYLE = "CellTable.css";

        public Sring coloredCell();
    }
}

Я передаю его конструктору моего CellTable:

CellTable<XY> table = new CellTable<XY>(15,cellTableResources);

Так выглядит моя пользовательская ячейка.

public class ColorCell extends AbstractCell<String> {

    interface Templates extends SafeHtmlTemplates {

      @SafeHtmlTemplates.Template("<div class=\"{0}\">{1}</div>")
      SafeHtml cell(String classname, SafeHtml value);
    }
    private static Templates templates = GWT.create(Templates.class);

    @Override
    public void render(Context context, String value, SafeHtmlBuilder sb) {
      if (value == null) {
        return;
      }
      // how can I access the CSSResources which I pass to the CellTable
      CellTableResources ressources = ?
      String className = ressources.cellTableStyle().coloredCell();

      SafeHtml safeValue = SafeHtmlUtils.fromString(value);
      SafeHtml rendered = templates.cell(className, safeValue);
      sb.append(rendered);
    }
  }

Как я могу получить доступ к своему CellTableRessources, который я передал в свой CellTable в своей пользовательской ячейке?Вот важная часть:

// how can I access the CSSResources which I pass to the CellTable
CellTableResources ressources = ?
String className = ressources.cellTableStyle().coloredCell();

Единственное решение, которое я придумаю, это передать CellTableRessources конструктору моего AbstractCell.Есть ли более элегантный способ (я уже передал его в CellTable).

Я думаю, что главный вопрос:
«Как я могу получить доступ к переменным CellTable из ячейки или столбца?»

1 Ответ

0 голосов
/ 14 января 2012

Проблема с «более элегантным способом» состоит в том, что это подразумевает, что собственные стили CellTable будут полезны в другом месте, чего они, вероятно, не будут. Даже если бы они предоставили геттер для стиля, он бы возвратил экземпляр типа Style, который вам затем пришлось бы привести к вашему собственному стилю.

Лучше всего рассмотреть это как ваш стиль, который предлагает несколько вариантов:

  • Держите ссылку рядом, чтобы вы могли получить к ней доступ из своей клетки
  • GWT.создайте новую копию клиентского пакета в вашей ячейке и вызовите sureInjected () - он будет фактически внедрять его только один раз, так что это действительно не проблема, просто хорошая практика, особенно если кто-то решит использовать Ваша клетка без стиля на самом столе.
  • И, наконец, разбейте стили, необходимые для ячейки, на их собственные клиентские пакеты / cssresource и сделайте их частью самой ячейки. Это позволяет полностью разделить зависимость ячейки от того, будет ли она помещена в таблицу ячеек (в отличие от списка ячеек или обозревателя ячеек и т. Д.).

Единственная сложность в том, что стили в ячейке do зависят от стилей в таблице, и в этом случае эта надоедливая зависимость, с которой вы имеете дело, хороша - она ​​требует, чтобы вы были осознавая эту зависимость в самих стилях. Если вы выберете третий (я считаю, это самый чистый) вариант, но у вас все еще есть эта зависимость, вы можете пойти еще дальше - объявить style / clientbundle в своей ячейке, но расширить его, как вы делаете, на ClientBundle CellTable - и поскольку это интерфейсы, вы можете создать один пакет, который расширяет оба из них и предоставляется для каждой таблицы и ячейки.

...