我想为单元格(或td本身)中的元素添加样式类,这些样式类将根据单元格中数据的状态而变化。例如,当数据未保存时,单元格可能为color:红色,当数据保存时为color:蓝色,保存成功后为color:黑色。Cell
外部的代码将需要访问来更改类名,一旦回调被触发,等等。
我已经实现了这样的东西在我的Cell
,从onBrowserEvent获得Element
,并在那里添加属性的黑客。我可以在render
中设置初始样式,然后在onBrowserEvent
中根据需要更改它,甚至可以跟踪该元素,以便外部代码可以使用它。这是不完整的,因为在onBrowserEvent被调用之前我无法获得元素,并且因为我必须在两个不同的地方设置样式而令人恼火。
当一个单元格的状态改变时,有什么更好的方法来实现这种效果,而不需要重新渲染整个表?
我发现了一些像
table.setRowStyles(new RowStyles() {
@Override
public String getStyleNames(Contact row, int rowIndex) {
if (row.name.startsWith("J")) {
return "bold";
}
return null;
}
});
应该在GWT 2.4中工作来解决您的问题
这里令人失望的答案是,您不可能同时拥有两者的优点——静态的、一次性呈现的和动态的、更改一个元素的更新。在CellTable
等提供的方法中,更改单个单元格样式的唯一方法是重新呈现整个表。
在我自己的代码中,我通过设置渲染到每个表单元格的div
的DOM id,将我所做的一次更新单个单元格的hack形式化了。然后我可以使用getElementById
并从那里继续。我仍然避免了一个完整的小部件的开销。它有点笨拙,但隐藏在一个漂亮的界面后面,它还不算太糟糕。