2009-11-16 69 views
29

在Grails中,视图层中存在两种模块化机制:模板TagLibGrails:模板与TagLibs。

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

在网上搜索后,我没有找到很多最佳实践或对本设计决策的经验法则,使你能帮助我,告诉我:

  1. 什么是主两种机制的区别?
  2. 在哪些场景中,您是否使用TagLib而不是模板(反之亦然)?

回答

23

肯定有一些重叠,但下面是几件事情要考虑。一种思考的方式是,Template就像方法级别的重用,而TagLibs更方便API级别的重用。

  • 模板是伟大的,当你有格式化的具体显示的东西。例如,如果要以特定方式显示域对象,通常在模板中执行该对象会更容易,因为您基本上只是用一些HTML编写HTML。它是可重用的,但我认为它的可重用性有点有限。即如果你有一个模板,你可以在几页中使用它,而不是在数百页中使用它。

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

  • 也有几种 标签库,包括那些让你 遍历在 身体的东西,有有条件的,等等 - 这是 不是真的有可能使用模板。 如上所述,精心设计的 taglib库可用于创建可重复使用的API,使您的GSP 代码更具可读性。在同一个* taglib内。groovy你可以有多个标签定义,所以这是另一个区别 - 你可以将它们全部组合在一起,然后从一个taglib调用到另一个。

另外,请记住,您可以从标签库中调用模板,或者您可以拨打标签库withing模板,这样你就可以根据需要随意搭配。

希望这可以帮你清楚一点,但实际上很多这样的结构更便于代码编写和多久重用。

+1

很棒!这正是我期待的答案!你已经说出了几句话,几乎没有形成我直觉中感觉到的东西。谢谢。 – fabien7474 2009-11-16 18:45:27

+1

“迭代体内的某些东西,有条件的等 - 这对模板来说不太可能” - 呃,对不起? 你可以在模板中编写任意的Groovy代码。即使没有Groovy代码,模板也可以遍历数组并执行条件。 尽管如此,最好还是这样做。 – 2009-11-16 19:53:38

+0

Victor - 我的意思是在taglib体内,你可以运行额外的代码,与你的taglib无关,不是你无法在模板中运行代码。我可能应该有更多资格。 – 2009-11-16 20:51:16

2

至于我们......

的编码器应该看到特定对象表示逻辑模板,没有任何其他地方。

我们仅将taglibs用于隔离的页面元素,根本不涉及业务逻辑。实际上,我们尽量减少它们的用法:在taglib中编写业务逻辑太容易了。

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

+0

关于在taglib中编写业务逻辑的危险的好处。在这方面它与控制器相似。如有疑问,请将其放入服务中,然后致电服务中心! (来自taglib或控制器或两者!) – cdeszaq 2013-01-09 15:37:59