代码之家  ›  专栏  ›  技术社区  ›  Chris Lercher

为什么htmlpanel不允许添加(widget)?

  •  4
  • Chris Lercher  · 技术社区  · 14 年前

    HTML面板继承 add(Widget) 方法从 com.google.gwt.user.client.ui.Panel ,但不会覆盖它。这将导致调用时出现不受支持的操作异常。

    如果它像flowpanel那样覆盖它,会有什么问题吗?

    @Override
    public void add(Widget w) {
      add(w, getElement());
    }
    

    背景:htmlpanel的构造速度比flowpanel快(innerhtml与dom操作)。但在构造之后,它当前不允许动态添加元素 * .

    *除了不太有用的方法 add(Widget widget, String id) 这使得在文档中不可能使用两次htmlpanel。

    3 回复  |  直到 12 年前
        1
  •  3
  •   Justin Fagnani    14 年前

    我不确定背后的理由,不包括微不足道的覆盖,但你可以调用 add(Widget, Element) 如果你愿意的话,你自己。

    我认为htmlpanel的一个想法是可以在面板的DOM中的任何地方添加一个小部件,因此它需要add()方法来强制您指定添加小部件的确切位置。通过这种方式,您可以使用一些复杂的HTML构建HTMLpanel,例如: "<div>...<div id="container"/>...<div>" 然后调用 add(myWidget, "container") .

    顺便说一句: add(Widget w, String id) 只是一种方便的方法。它不创建具有ID的新元素,而是查找具有ID的元素并调用 添加(小部件、元素) .

        2
  •  1
  •   Chris Lercher    12 年前

    方法已在中添加到htmlpanel r9462 2010年12月17日。

        3
  •  0
  •   markovuksanovic    14 年前

    关于添加(widget widget,string id)-这个方法只适用于在htmlpanel中定义的元素-如javadoc中所述(我也在我的机器上验证了这一点)。

    我如何从javadoc addandreplaceElement(widget widget,java.lang.string id)中理解它,将在任何元素上工作,但仍然将新的widget附加到htmlpanel(基本上,htmlpanel将处理事件,而widget的物理位置将由删除的元素的位置决定)。