我在代码中主要使用GWT。我现在有一个TextInputCell列:基于this SO answer我知道我可以在GWT的占位符文本(或任何其他财产)添加到正规的文本字段这样将属性添加到单元格(在代码中)
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");
...
}
...
}
:
TextField myInputField = new TextField();
myInputField.getElement().setPropertyString("placeholder", "some placeholder text");
但是,在TextInputCell上,并没有真正的getElement()
方法来检索输入字段。
当通过我整个protected getInputElement(parent)
方法传来TextInputCell类代码看,所以我也设法得到一个占位符以下解决方法:
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)单元格的一列,而不是这个丑陋也许工作解决?
编辑:有些事情我已经试过:
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)
方法调用的方法,而不是当输入字段为焦点时。
很烦人,没有办法直接访问GWT中的TextInputCell
的InputField ...