我最近开始在其中一个应用程序中使用GWT。我对UiBinder的使用有疑问。如果我在类中声明了@UiField属性(同样在.ui.xml中也声明了该属性),我可以在该类中创建一次该对象后,可以创建该类型的新对象并将其分配给相同的引用吗?构造函数?

例如,如果我的ui.xml文件具有一个DockLayoutPanel,其中心具有一个PlotWidget。

public class PlotWidget extends Composite {

    @UiField (provided = true)
    SimplePlot plot;

    public Constructor() {
        plot = new SimplePlot(someArgument1, someArgument2);
    }

    // some method
    public doSomething() {
        // Is this valid?
        plot = new SimplePlot(someArgument3, someArgument4);
    }
}


该图是否仍附加在DockLayoutPanel上?如果没有,我将如何实现需要创建上述新对象的功能?

任何指针将不胜感激。

最佳答案

您的示例代码中缺少的是ui绑定器create调用,类似于initWidget(uiBinder.createAndBindUi(this));。在初始化(在这种情况下)构造函数中的ui字段plotContainer之后,将调用此方法。如果要将新实例重新分配给SimplePlot,则新实例将不会附加到DockLayoutPanel,并且如果确实替换了现有实例,则还需要重新附加处理程序。

解决方案可以是通过创建SimplePlot的方法调用来设置自变量,或者代替创建新的SimplePlot实例。但是,如果创建SimplePlot的唯一方法是通过构造函数,则如果您无法控制实现,则可以创建一个单独的uibinder类/小部件来创建SimplePlot,该类将创建SimplePlot并附加处理程序,并通过如sinicyn所述在PlotWidget上。

关于java - GWT UiBinder-将新对象分配给UiField引用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11610882/

10-10 22:50