Velocity parse + 全局变量 vs. 宏
Velocity parse + global variables vs. macro
在我的项目中,我有很多 html 代码块,我在不同的地方重复使用它们,但稍有不同。例如,我有一个定义信息横幅的代码块,但文本和配色方案各不相同。
我看到有两种方法可以将它“包含”到我的主模板中:
1.
#set( $infoBannerText = "This is an info banner..." )
#set( $infoBannerColor = "YELLOW" ) ## predefined map with color-related properties
#parse( "info-banner" )
- 和之前定义过
#macro( info_banner $infoBannerText $infoBannerColor )
:
#info_banner( "This is an info banner..." "YELLOW" )
我看到以下优点/缺点:
第二个在缺少变量定义或意外覆盖变量方面更健壮。而第一个具有更好的性能,并允许更清晰的可重用部分结构,我可以将其存储在单个文件中。使用宏的感觉就像,我最终会得到一个不清晰的大宏文件。
不知何故,我更喜欢第一个解决方案,但想知道什么是“最佳实践”或您有什么经验。
您可以混合使用两种方式:
#macro(info_banner, $infoBannerText, $infoBannerColor)
#if(!$infoBannerText) Missing banner text! #end
#if(!$infoBannerColor) Missing banner color! #end
#parse('info-banner')
#end
#info_banner( "This is an info banner..." "YELLOW" )
我真的没有发现任何性能问题。一个好的做法是将所有已解析的块收集在某个 /inc/
子文件夹中,这样它们就不能作为顶级模板直接调用。
在我的项目中,我有很多 html 代码块,我在不同的地方重复使用它们,但稍有不同。例如,我有一个定义信息横幅的代码块,但文本和配色方案各不相同。
我看到有两种方法可以将它“包含”到我的主模板中:
1.
#set( $infoBannerText = "This is an info banner..." )
#set( $infoBannerColor = "YELLOW" ) ## predefined map with color-related properties
#parse( "info-banner" )
- 和之前定义过
#macro( info_banner $infoBannerText $infoBannerColor )
:
#info_banner( "This is an info banner..." "YELLOW" )
我看到以下优点/缺点: 第二个在缺少变量定义或意外覆盖变量方面更健壮。而第一个具有更好的性能,并允许更清晰的可重用部分结构,我可以将其存储在单个文件中。使用宏的感觉就像,我最终会得到一个不清晰的大宏文件。
不知何故,我更喜欢第一个解决方案,但想知道什么是“最佳实践”或您有什么经验。
您可以混合使用两种方式:
#macro(info_banner, $infoBannerText, $infoBannerColor)
#if(!$infoBannerText) Missing banner text! #end
#if(!$infoBannerColor) Missing banner color! #end
#parse('info-banner')
#end
#info_banner( "This is an info banner..." "YELLOW" )
我真的没有发现任何性能问题。一个好的做法是将所有已解析的块收集在某个 /inc/
子文件夹中,这样它们就不能作为顶级模板直接调用。