【问题标题】:Difference between annotating with @Tag(Tag.DIV) and extending from Div class使用 @Tag(Tag.DIV) 注释和从 Div 类扩展之间的区别
【发布时间】:2019-03-09 20:44:41
【问题描述】:

我正在学习 Vaadin 11,我有一个问题。这有什么区别:

public class MyClass extends Div { /... }

...还有这个?:

@Tag(Tag.DIV)
public class MyClass { /** }

根据文档:

Div 类: 表示 <div> 元素的组件。

标签注释: 定义用于使用默认 Component 构造函数创建的组件的根元素的标记。

看起来他们在做同样的事情:创建一个类来表示一个根元素。是这样吗?

【问题讨论】:

    标签: vaadin vaadin10 vaadin-flow


    【解决方案1】:

    这两种方式都会在浏览器中为您提供<div> 元素(除非您需要将extends Component 添加到@Tag(Tag.DIV) 示例中)。

    不同之处在于Div 类还专门为<div> 元素定义了一些额外的API,而如果使用@Tag(Tag.DIV) 创建通用Component 子类,则您可以完全控制组件的公共API。

    【讨论】:

      【解决方案2】:

      不同之处在于服务器端 API。 Div 类本身非常简单,但它确实通过其父类实现了一些有用的 mixin 接口,例如 HasSizeHasStyle。这意味着您可以例如如果您要扩展 Div,请致电 myClass.setHeight("500px")

      另一方面,如果您使用 @Tag 注释来告诉您的 MyComponent 类在客户端上有 div 标记,那么除了您决定的内容之外,您不会公开任何服务器端方法提供自己。这是好事还是坏事取决于您想为班级用户提供什么样的功能。

      【讨论】:

        猜你喜欢
        • 2011-03-30
        • 2012-06-25
        • 2017-09-29
        • 2015-05-08
        • 1970-01-01
        • 1970-01-01
        • 2014-04-29
        • 2012-09-02
        • 1970-01-01
        相关资源
        最近更新 更多