Стиль GWT не работает в AbstractCell - PullRequest
1 голос
/ 07 января 2012

Я пытаюсь создать собственный рендерер ячеек для моей GWT CellTable. Я пытаюсь установить стиль CSS внутри ячейки, но по какой-то причине он не рендерится.

Вот мой пользовательский рендерер клеток

static class MyStringCell extends AbstractCell<String> implements Cell<String> {

    interface UncheckedStringTemplate extends SafeHtmlTemplates {
        @SafeHtmlTemplates.Template("<div style=\"{0}\"><input type=\"checkbox\"/>{1}</div>")
        SafeHtml cell(SafeStyles styles, SafeHtml vendorName);
    }
    private static UncheckedStringTemplate uncheckedStringTemplate = GWT.create(UncheckedStringTemplate.class);

    @Override
    public void render(com.google.gwt.cell.client.Cell.Context context, String value, SafeHtmlBuilder sb) {
        if (value == null) {
            return;
        }

        SafeHtml vendorName = SafeHtmlUtils.fromString(value);
        SafeStyles styles = SafeStylesUtils.fromTrustedString("noaccess;");                                             
        SafeHtml rendered = uncheckedStringTemplate.cell(styles, vendorName);   
        sb.append(rendered);

    }
}        

И вот где я звоню рендереру

Column<MyObject, String> userNameSelectedColumn = new Column<MyObject, String>(new MyStringCell()) {
    @Override
    public String getValue(MyObject myObject) {
        return myObject.getName();
    }
};      
vendorPermissions.addColumn(userNameSelectedColumn, "Objects w/ checkboxes");

Этот код создает этот фрагмент HTML (обратите внимание на пустой стиль)

<div style=""><input type="checkbox">Vendor 1</div>

Все это близко следует за примером GWT для создания пользовательских ячеек , и я не смог выяснить, где это происходит неправильно - или это ошибка.

Я, однако, использовал отладчик GWT для проверки отрендеренной строки, и он, кажется, содержит информацию о стиле в тот момент - поэтому он удаляется в какой-то момент дальше по конвейеру GWT и до того, как он доберется до моего браузер.

Есть идеи?

1 Ответ

3 голосов
/ 07 января 2012

Неважно - я делал это неправильно. Стиль работает, если я делаю что-то вроде

SafeStyles styles = SafeStylesUtils.fromTrustedString("width: 100%;");

вместо глупости, которую я делал. GWT должен иметь фильтр для удаления бессмысленных стилей.

Я пытался установить атрибут класса CSS с помощью этого механизма, что было неправильно. Установка атрибута класса в HTMLTemplate, используемого классом Abstract, работает предсказуемо.

...