2009-11-16 37 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