protected void addButtonColumn(String header, final IHasValue<Row, Button> hasVal){
Column<Row, String> column = new Column<Row, String>(new TextButtonCell()) {
@Override
public String getValue(Row object) {
return ((Button)hasVal.getValue(object)).getText();
}
};
column.setFieldUpdater(new FieldUpdater<Row, String>() {
@Override
public void update(int index, Row object, String value) {
((Button) hasVal.getValue(object)).click();
}
});
table.addColumn(column, header);
}
我希望每个按钮在点击时有所不同,但它不起作用。我知道我应该在setfieldupdater做一些事情,但我不知道是什么。
答案 0 :(得分:1)
您使用TextButtonCell
来包含Button
(即小部件)并没有多大意义 - 让单元格访问数据会不会更容易,并使用ValueUpdater
直接触发基于该数据的某种行为?
单元格不是小部件 - 它们比小部件简单得多。这主要意味着两件事:他们画得更快,而且更愚蠢。这两件事都是由于单个单元实例用于以稍微不同的方式绘制许多数据。如果你要为每个元素构建一个按钮,那么使用基于单元格的小部件是没有意义的 - 你几乎把所有东西都画了两次,并且得到了两个世界中最糟糕的部分(代码慢,这很难与...合作。
不要使用附加Button
的{{1}},而是使用其他抽象来处理点击,例如每行ClickHandler
个实例,甚至更好,某种接受单击的行实例的处理程序。将Command
实例作为方法的参数传入可能是有意义的(并且可能在FieldUpdater
而不是IHasValue
上制作String
泛型,因此您的模型不需要包装小部件。)
(这可能不是直接回答你的问题,而是希望有助于阐明我们为什么要使用单元格,以及如何最好地编写利用单元格的代码。)