如何强制小部件重绘自己

How to force widget to redraw himself

我刚开始使用 gwt,我正在尝试解决以下任务: 我有两个 classes Month 和 Year 扩展复合。在我的实现中 class 我有

UiField(provided = true)
Composite composite;

Month month;

Year year;
...
//Constructor
@Inject
MyClassImpl(){
  month = new Month();
  year = new Year();
  composite = month;
}

updateComposite(){
  composite = year;
  logger.fine("composite = " + composite);
}

我的问题是,当我调用 updateComposite() 方法时,我在控制台上看到它已更新但未在屏幕上重绘。看起来我的问题的答案很简单,但我没能找到。我看了这里 How can I force GWT widget to update? 和其他一些地方。

如果 class 中的一个字段(如果是 JS 对象,它将转换为 属性),你正在更改值,你没有将组件交换到 DOM.

您需要用新值代替 DOM 中的旧值。不过,您执行此操作的方式在很大程度上取决于您的 ui.xml。一种可能性是在 ui.xml 中使用 SimplePanel 并使用 setWidget 设置要显示的适当小部件。