在 Grails 中,视图层有两种模块化机制: 模板标签库.

当我编写自己的 Grails 应用程序时,当我需要编写 UI 组件时,我经常面临同样的问题: 我需要使用模板或 TagLib 吗?

网上查了一下,没有找到很多 最佳实践 或有关此设计决策的经验法则,所以您可以帮助我并告诉我:

  1. 这两种机制的主要区别是什么?
  2. 在哪些情况下,您使用 TagLib 而不是模板(反之亦然)?
有帮助吗?

解决方案

肯定存在一些重叠,但以下是需要考虑的几件事。一种思考方式是,Template 就像是方法级别的复用,而 TagLib 更方便 API 级别的复用。

  • 模板 当您必须格式化特定的内容以供显示时,非常有用。例如,如果您想以特定方式显示域对象,通常在模板中更容易做到这一点,因为您基本上只是用一些 .它是可重用的,但我认为它的可重用性有点有限。IE。如果您有模板,您会在几个页面中使用它,而不是在数百页中使用它。

  • 另一方面, 标签库 是一个较小的功能单元,但您更有可能在许多地方使用它。在其中您可能会连接字符串,因此如果您希望创建一百行 HTML,则它们不太方便。标签库允许的一个关键功能是能够注入服务/与服务交互。例如,如果您需要一段代码来调用身份验证服务并显示当前用户,则只能在 TagLib 中执行此操作。在这种情况下,您不必担心将任何内容传递给 taglib - taglib 会从服务中找出它。您也可能在许多页面中使用它,因此拥有不需要参数的标记库会更方便。

  • 还有几种Taglibs,包括可以让您迭代体内的某些东西,有条件等等的Taglib,这对于模板来说是不可能的。如上所述,可以使用精心制作的Taglib库来创建可重复使用的API,以使您的GSP代码更可读。在同一个 *taglib.groovy 中,您可以有多个标记定义,因此这是另一个区别 - 您可以将它们全部分组到一个位置,然后从一个标记库调用到另一个标记库。

另外,请记住,您可以从标记库内部调用模板,也可以使用模板调用标记库,以便您可以根据需要进行混合和匹配。

希望这能让你明白一点,尽管实际上很多都是关于什么构造更方便编码以及它被重用的频率。

其他提示

至于我们...

编码员应该在模板中看到特定的对象表示逻辑,而不是其他任何地方。

我们仅将标签库用于独立的页面元素,与业务逻辑完全无关。实际上,我们试图尽量减少它们的使用:在标签库中编写业务逻辑太容易了。

模板是传统的方法;例如,它们支持布局(顺便说一句,它们可以被称为第三种机制)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top