Я использую GWT в основном в коде. Я в настоящее время есть столбец с TextInputCell:Добавить объявление в ячейку (в коде)
public class EditPanel extends Composite{
@UiField
protected DataGrid<MyObject> dataGrid;
public EditPanel(final ActionHandler actionHandler){
...
Column<MyObject, String> inputColumn = new Column<MyObject, String>(new TextInputCell()){
... // Override of the getValue
};
inputColumn.setFieldUpdater(...);
this.dataGrid.addColumn(inputColumn, "Column title");
...
}
...
}
Основываясь на this SO answer я знаю, что могу добавить замещающий-текст (или любое другое имущество) к обычному TextField в GWT, как это:
TextField myInputField = new TextField();
myInputField.getElement().setPropertyString("placeholder", "some placeholder text");
Тем не менее, в TextInputCell нет способа getElement()
для извлечения поля ввода.
Просматривая TextInputCell класса кода я наткнулся на метод protected getInputElement(parent)
, так что я смог получить заполнитель со следующим обходным:
final TextInputCell myInputCell = new TextInputCell(){
@Override
protected InputElement getInputElement(final Element parent){
final InputElement inputElement = super.getInputElement(parent);
inputElement.setPropertyString("placeholder", "my placeholder text");
return inputElement;
}
};
Column<MyObject, String> inputColumn = new Column<MyObject, String>(myInputCell){
...
};
Он работает, но у меня есть две проблемы:
- Очевидно, что это очень некрасиво, чтобы установить его, как это ..
getInputElement(parent)
-метод не называется изначально. Я получаю местозаполнитель, когда я фокусирую одно из поля ввода, но свойство не всегда добавляется по умолчанию.
У кого-нибудь есть реальное решение о том, как добавить свойство в ячейку (TextInput) Столбец, вместо этого уродливого , возможно, - рабочий процесс?
EDIT: Некоторые вещи, которые я пробовал:
1) Попытка извлечения элемента с помощью метода getRowElement
, как в this SO question & answer:
this.dataGrid.addColumn(inputColumn, "Column title");
if (this.dataGrid.getRowCount() > 0){
final Element element = this.dataGrid.getRowElement(0);
element.setProperty("placeholder", "some placeholder text");
}
Это не работает, потому что getRowCount()
всегда возвращается 0. Я также пробовал this.dataGrid.redraw();
прямо перед ним, но он все равно возвращает 0.
2) Переопределение то TextInputCell
как geert3 предложил:
public class MyTextInputCell extends TextInputCell{
@Override
public InputElement getInputElement(Element parent){
return super.getInputElement(parent);
}
}
Проблема? Я не знаю, что добавить в родительский параметр. Я действительно пытался this.getElement()
:
MyTextInputCell textInputCell = new MyTextInputCell();
Column<MyObject, String> inputColumn = new Column<MyObject, String>(textInputCell){
... // Override of the getValue
};
inputColumn.setFieldUpdater(...);
this.dataGrid.addColumn(inputColumn, "Column title");
textInputCell.getInputElement(this.getElement()).setPropertyString("placeholder", "some placeholder text");
, но это не похоже на работу. И когда я пытаюсь this
, this.dataGrid
или inputColumn
, выдается сообщение об ошибке, поскольку они не рассматриваются как Elements
(и я также не могу их отличить).
3) Используя мой первоначальный обход.
Проблема: я не могу найти способ принудительного вызова метода getInputElement(parent)
при загрузке страницы, а не при фокусировке поля ввода.
Довольно раздражает, что нет возможности прямого доступа к входным полям TextInputCell
в GWT ...