使用 @Tag(Tag.DIV) 注释和从 Div class 扩展的区别
Difference between annotating with @Tag(Tag.DIV) and extending from Div class
我正在学习 Vaadin 11,我有一个问题。这有什么区别:
public class MyClass extends Div { /... }
...还有这个?:
@Tag(Tag.DIV)
public class MyClass { /** }
根据文档:
Div class:
Component representing a <div>
element.
Tag annotation:
Defines the tag to use for the root element for a component created using the default Component constructor.
看起来他们在做同样的事情:制作一个 class 来表示根元素。是吗?
这两种方式都会在浏览器中为您提供一个 <div>
元素(除了您需要将 extends Component
添加到 @Tag(Tag.DIV)
示例中)。
区别在于 Div
class 还专门为 <div>
元素定义了一些额外的 API,而您可以完全控制 public API 组件的 Component
subclass 和 @Tag(Tag.DIV)
.
区别在于服务器端API。 Div
class 本身确实很简单,但它确实通过其父类实现了一些有用的 mixin 接口,如 HasSize
和 HasStyle
。这意味着您可以,例如如果要扩展 Div
,请调用 myClass.setHeight("500px")
。
另一方面,如果您使用 @Tag
注释来表明您的 MyComponent
class 在客户端具有 div
标记,则您不会除了您决定自己提供的内容之外,还公开任何服务器端方法。这是好事还是坏事取决于您想为 class 的用户提供什么样的功能。
我正在学习 Vaadin 11,我有一个问题。这有什么区别:
public class MyClass extends Div { /... }
...还有这个?:
@Tag(Tag.DIV)
public class MyClass { /** }
根据文档:
Div class: Component representing a
<div>
element.
Tag annotation: Defines the tag to use for the root element for a component created using the default Component constructor.
看起来他们在做同样的事情:制作一个 class 来表示根元素。是吗?
这两种方式都会在浏览器中为您提供一个 <div>
元素(除了您需要将 extends Component
添加到 @Tag(Tag.DIV)
示例中)。
区别在于 Div
class 还专门为 <div>
元素定义了一些额外的 API,而您可以完全控制 public API 组件的 Component
subclass 和 @Tag(Tag.DIV)
.
区别在于服务器端API。 Div
class 本身确实很简单,但它确实通过其父类实现了一些有用的 mixin 接口,如 HasSize
和 HasStyle
。这意味着您可以,例如如果要扩展 Div
,请调用 myClass.setHeight("500px")
。
另一方面,如果您使用 @Tag
注释来表明您的 MyComponent
class 在客户端具有 div
标记,则您不会除了您决定自己提供的内容之外,还公开任何服务器端方法。这是好事还是坏事取决于您想为 class 的用户提供什么样的功能。