2016-03-07 44 views
0

我在代码中主要使用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){ 
    ... 
}; 

它的工作原理,但我有两个问题:

  1. 显然,这是非常丑陋的设置像这样..
  2. 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)覆盖TextInputCellgeert3建议:

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"); 

但这似乎并不奏效。当我尝试thisthis.dataGridinputColumn它给出了一个错误,因为它们不被认为是Elements(我也不能施放它们)。

3)使用我最初的解决方法。

问题:当页面加载时,我无法真正找到强制执行getInputElement(parent)方法调用的方法,而不是当输入字段为焦点时。

很烦人,没有办法直接访问GWT中的TextInputCell的InputField ...

回答

0

我一直在阅读一些细胞。这些实际上被重用,单个Cell可以呈现自己的多个DOM实例,并且它可以处理来自多个呈现实例的事件。这意味着一个Cell没有一个一对一的关联元素,但是当它被重用时接收“current”元素,并作为几个方法的“父”参数传递。

所以最后我认为这意味着您在问题中描述的原始解决方案似乎是一个有效的解决方案,而不是“丑陋”。