таблица ячеек gwt: можно сделать редактируемыми только некоторые ячейки в столбце?

#gwt #gwt-celltable

#gwt #таблица ячеек gwt

Вопрос:

Я использую GWT 2.4. При использовании таблицы ячеек я видел, что можно добавить столбец, в котором все ячейки доступны для редактирования…

 final TextInputCell nameCell = new TextInputCell();
Column<Contact, String> nameColumn = new Column<Contact, String>(nameCell) {
  @Override
  public String getValue(Contact object) {
    return object.name;
  }
};
table.addColumn(nameColumn, "Name");
  

но что, если я не хочу, чтобы каждая ячейка в столбце была доступна для редактирования, только определенные, основанные на свойствах моего объекта «Контакт»? Как бы я это настроил? Спасибо, — Дэйв

Ответ №1:

Я бы сделал это так: расширил TextInputCell и переопределил метод render для отображения чего-то другого, если вы не хотите, чтобы значение в этой конкретной строке можно было редактировать.

Что-то вроде этого:

 public class MyTextInputCell extends TextInputCell {
  @Override
  public void render(Context context, String value, SafeHtmlBuilder sb) {
     YourObject object = getYourObject();
     if ( object.isThisCellEditable() ) {
        super.render(context,value,sb);
     } else {
        sb.appendEscaped(value); // our some other HTML. Whatever you want.
     }
  }
}
  

В методе визуализации у вас есть доступ к контексту ячейки. Context.getIndex() возвращает абсолютный индекс объекта. Я не могу вспомнить верхнюю часть своего пакета прямо сейчас, но если вы не предоставите реализацию ProvidesKey при создании своей таблицы ячеек, вы получите ту, которая будет использовать сам объект в качестве ключа. Таким образом, вы можете получить объект с помощью Context.getKey() .

Комментарии:

1. Спасибо за это, но я все еще чего-то не понимаю. В моей колонке я имею дело с объектами «Contact». Как мне получить ссылку на объект Contact в MyTextInputCell?

2. Я определил ProviderKey, но он определяет только то, насколько конкретный объект Contact уникален (т. Е. Возвращает его идентификатор). Как мне использовать это, чтобы выяснить, как получить объект, на котором основан идентификатор? Должен ли я создавать гигантскую карту всех моих объектов, а затем просто ссылаться на карту? Похоже, что было бы более элегантное решение. Спасибо, —

3. Взгляните на google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google /… эта реализация ProvidesKey возвращает фактический объект в качестве ключа. Итак, когда вы вызываете Context.getKey(), вы фактически получите объект Contact.

4. Вау, чувак, спасибо за это! Пять лет спустя, и вы заставили меня сказать «вау» вслух после того, как это сработало, СПАСИБО! 🙂