GWT - динамическое содержимое списка ячеек

У меня есть сотовая таблица с двумя столбцами, именем и автомобилями, которыми он владеет. Один из столбцов (автомобилей) должен быть списком. Объект человека будет отображаться как строка в таблице ячеек. В списке будут показаны названия автомобилей, принадлежащих этому человеку. Скажем,

Person jack has 3 cars(Merc, BMW, Honda)
Person jill has 2 cars(Mini Cooper, Toyota Rav4)

Я видел витрину, и в ней реализован выпадающий список с фиксированными категориями. Но у меня есть раскрывающийся список, содержимое которого будет зависеть от содержимого объекта Person.

Я также хочу зафиксировать событие, когда пользователь выберет одну из машин в раскрывающемся списке. Любые идеи, как это сделать?


person blue01    schedule 21.08.2012    source источник
comment
Это дублирующий вопрос. нашел ответ здесь - заголовок [stackoverflow.com/questions/4565790/ [1]: stackoverflow.com/questions/4565790/   -  person blue01    schedule 22.08.2012


Ответы (1)


Насколько я знаю, CellWidgets не предоставляет тип ячейки, который поддерживает динамические списки из коробки.
Однако вы можете реализовать свою собственную ячейку, производную от AbstractCell, и реализовать функциональность самостоятельно. Дополнительную информацию см. в документации GWT.

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

public class DynamicSelectionCell extends AbstractCell<MyDTO> {


    @Override
    public void render(Context context, MyDTO value, SafeHtmlBuilder sb) {

      if (value == null) {
        return;
      }
       // render a selectionbox and dynamically add options by accessing the value.getAvailablOptions() 
    }
  }

Добавьте геттер к вашему объекту MyDTO, который возвращает доступные типы (Honda и т. д.) для конкретной записи, а в методе рендеринга вы просто создаете поле выбора.
Вы можете проверить код для SelectionCell, как правильно его отображать.

Что касается обработки событий, вы должны реализовать onBrowserEvent. Подробнее см. здесь.

person Ümit    schedule 22.08.2012