Grails:模板与TagLibs.

fab*_*474 30 grails templates taglib gsp

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

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

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

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

Jea*_*ash 24

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

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

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

  • 还有几种taglib,包括允许你在体内迭代的东西,有条件的等等 - 这对模板来说是不可能的.如上所述,精心设计的taglib库可用于创建可重用的API,使您的GSP代码更具可读性.在同一个*taglib.groovy中,您可以有多个标签定义,这是另一个区别 - 您可以将它们全部分组到一个位置,并从一个taglib调用另一个.

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

希望这能为你清理一下,不过真的很多,这就是构造对代码更方便以及重复使用的频率.

  • 我通常使用两者的混合.我将创建一个taglib来处理准备任何类型的模型,然后使用准备好的模型渲染模板.我试图遵循的经验法则是HTML的大部分应该在模板中,而Groovy代码的大部分应该在taglib中. (4认同)