Grails:模板与TagLibs。

时间:2009-11-16 16:58:54

标签: templates grails gsp taglib

在Grails中,视图层有两种模块化机制:模板 TagLib

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

在网上搜索后,我没有找到很多关于此设计决定的最佳做法或经验法则,所以你能帮助我并告诉我:

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

2 个答案:

答案 0 :(得分:24)

肯定存在一些重叠,但下面有几点需要考虑。考虑它的一种方法是模板就像方法级重用,而TagLibs更方便API级重用。

  • 模板非常适用于必须格式化特定显示内容的内容。例如,如果您想以特定方式显示域对象,通常在模板中更容易实现,因为您基本上只是用一些来编写HTML。它是可重用的,但我认为它的可重用性有点受限。即如果你有一个模板,你可以在几个页面中使用它,而不是在数百个页面中使用它。

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

  • 还有几种 taglibs,包括允许的 你要迭代一些东西 身体,有条件等 - 那是 模板不太可能。 正如我上面所说,精心制作 taglib库可用于创建 一个可重复使用的API,可以生成您的GSP 代码更具可读性。在同一个* taglib.groovy中,您可以有多个标签定义,这是另一个区别 - 您可以将它们全部分组到一个位置,并从一个taglib调用到另一个。

另外,请记住,您可以从taglib中调用模板,或者可以使用模板调用taglib,这样您就可以根据需要进行混合和匹配。

希望这能为你清除一点,但实际上很多这样的构造对代码来说更方便,以及它的重用频率。

答案 1 :(得分:3)

至于我们......

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

我们仅将taglib用于隔离的页面元素,根本不与业务逻辑相关。实际上,我们尝试最小化它们的使用:在标记库中编写业务逻辑太容易了。

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