2

如果我刚开始使用 gwt,如果我的问题太天真,请原谅我。

我创建了一个gwt module(比方说Editor_A),它有许多 DataGrid、按钮等。它在网页中运行良好。

然后我将要创建第二个 gwt 模块Editor_B

它们永远不会出现在同一页面上,但是,它们Editor_B非常相似,Editor_A因为它只有一个额外的表格和一个按钮。

当然,现在我不想将代码从复制/粘贴Editor_AEditor_B. 相反,我希望重用来自 Editor_A 的代码

我怎样才能做到这一点?

如何从 Editor_A 继承并通过一些修改重用其大部分代码以生成 Editor_B?

4

2 回答 2

3

这可以解决您的问题:您可以创建一个额外的核心模块,它负责您的基本自定义小部件、客户端实用程序等。然后您应该在两个模块中继承核心模块。因此,在您的情况下,您可以创建由 使用的 Composite 小部件Editor_A,然后在您的后一个模块中,您可以Editor_B通过继承来创建您的Editor_A。当然,您可以从Editor_B类中添加一些修改。

如果您在同一个模块中使用它们,您可以创建一个 BaseEditor,在您的情况下为 Editor_A。接着:

public class Editor_B extends Editor_A{
    public Editor_B(){
      draw();
    }

    private void draw(){
   // here, add your extra table and button, to panel which're protected(public)
    }
}

除了 Java Inheritance 一定要以适当的方式配置 GWT 模块,否则 GWT Java to Javascript 编译器将找不到相关的类。通过将模块 XML 配置修改为如下所示来执行此操作:

<module>
   <inherits name='com.google.gwt.user.User'/>
   <source path="widgets"/>
</module>
于 2012-10-10T15:41:21.730 回答
2

最好的方法是创建可以在同一模块或不同模块中轻松重用的自定义小部件。然后,您可以:

(a) 通过添加更多子小部件和/或新功能来扩展自定义小部件(MyBigPanel 扩展 MySmallPanel),或

(b) 简单地将更多子元素添加到同一个复合小部件(前提是它可以接收它们,即您使用 LayoutPanel、FlowPanel、HtmlPanel 等作为自定义小部件的容器)。然后您只需调用 mySmallPanel.add(anotherButton)。

附注:您提到这些小部件不会在同一页面上使用。这并不意味着它们必须位于不同的模块中。它们可以在同一模块的不同视图中使用。例如,将模块视为具有不同用户的独立应用程序。在这种情况下,您可以将所有小部件抽象到不同的模块中(并在其他模块中继承它),也可以将它们放在单独的 jar 中。

于 2012-10-10T18:20:48.373 回答