使用自定义标签是否有使用basic< cfinclude>?的任何好处?
您之前编写的任何自定义标记都会增加HTML可维护性?
谢谢
解决方法 是的,是的.自定义标签非常适合分离可重用的HTML元素.优点是它们是范围安全的,您可以将参数传递给它们以改变它们的行为,这是cfinclude无法做到的.您甚至可以创建嵌套标签,根据父级更改其行为.我在ColdFusion中的大多数HTML布局都是这样的:
<cf_layout> <cf_head title="My Page> <!--- Some local head stuff ----> </cf_head> <cf_content> Lots of stuff goes here. </cf_content></cf_layout>
这显然大大简化了,但我可以通过更改自定义标记,甚至更改自定义标记文件夹来更改网站的整个布局(想想动态this.customTagPaths来交换布局.
自定义标签没有得到足够的爱.拥抱他们,享受:).
这是我做的另一个例子:
<cfset arOrders = OrderService.getorders() /><table> <cfloop array="#arOrders#" index="currentOrder"> <cf_orderrow order="#currentOrder#" /> </cfloop></table>
我的OrderRow自定义标签处理所有显示,以便在表格中显示订单的行.这包括添加/编辑/删除按钮,必须进行的计算,必须由我来改变显示的条件.我可以在管理区域中的任何地方显示订单行.在客户详细信息页面上,显示特定时间段内所有订单的页面.没什么区别.我的用户知道他们看到一行描述订单的任何地方,它看起来就像他们期望的那样.
以下是我在多个应用程序中使用的小型自定义标记的一些更具体的示例.
cf_jquery
这包括页面中的jquery和jqueryUI,但前提是应用程序中没有其他模板已经在此请求中添加了jquery.这允许我为一个页面构建多个jquery部分,无论我调用它们的顺序如何,我都会知道jquery只被添加到文档的头部一次.
<cfif thisTag.ExecutionMode EQ "end" AND (NOT StructKeyExists(Request,"JqueryInited") OR Request.JqueryInited EQ False)> <cfparam name="Attributes.IncludeUI" default="False" /> <cfparam name="Request.jqueryUIInited" default="False" /> <script type="text/JavaScript" src="//AJAX.GoogleAPIs.com/AJAX/libs/jquery/1.5.1/jquery.min.Js"></script> <cfif Attributes.IncludeUI AND Request.jqueryUIInited IS False> <link href="/shared/CSS/smoothness/jquery-ui-1.8.11.custom.CSS" rel="stylesheet" /> <script type="text/JavaScript" src="//AJAX.GoogleAPIs.com/AJAX/libs/jqueryui/1.8.11/jquery-ui.min.Js"></script> <cfset Request.jqueryUIInited = True /> </cfif> <cfset Request.JqueryInited = True /></cfif>
我甚至为小信息构建标签,我知道这些标签将在多个地方的整个应用程序中使用,例如cf_contact标签:
<cfif thisTag.ExecutionMode EQ "end"> <cfparam name="Attributes.Phone" default="xxx.xxx.xxxx" /> <cfparam name="Attributes.Email" default="me@you.com" /> <cfparam name="Attributes.Emailname" default="Email Support" /> <h2 >Contact Us</h2> <p ><cfoutput>#Attributes.Phone#</cfoutput><br /> <cfoutput><a href="mailto:#Attributes.Email#">#Attributes.Emailname#</a></cfoutput></p></cfif>
为什么要为这么小的东西制作标签?为什么不?如果我在整个应用程序中将所有联系信息设置为相同(我应该,因此用户可以轻松识别内容),那么我可以像制作包含一样轻松地为其制作标签.如果我决定在那里发生其他一些编程行为,我的应用程序已经设置为使用它.
cf_timeblock
此自定义标签显示一组用于选择时间块的选择列表(hh:mm tt).我在处理调度的应用程序中使用这个,所以我有一个标签,允许我显示一段时间,我可以发送应该预先选择的值(我缺少对属性的验证,但只是假装它现在在那里):
<cfif thisTag.ExecutionMode EQ "end"> <cfsilent> <!--- Get Time Blocks ---> <cfset TimeBlocks = Application.DAO.getTimeQuerIEs() /> </cfsilent> <select name="hour" > <cfoutput query="TimeBlocks.Hours"> <option value="#TimeBlocks.Hours.Value#"<cfif TimeBlocks.Hours.Value EQ Attributes.Hour> selected="selected"</cfif>> #TimeBlocks.Hours.Value# </option> </cfoutput> </select>:<select name="min" > <cfoutput query="TimeBlocks.Mins"> <option value="#TimeBlocks.Mins.Value#"<cfif TimeBlocks.Mins.Value EQ Attributes.Min> selected="selected"</cfif>> #TimeBlocks.Mins.Value# </option> </cfoutput> </select> <select name="mer" > <cfoutput query="TimeBlocks.Mer"> <option value="#TimeBlocks.Mer.Value#"<cfif TimeBlocks.Mer.Value EQ FORM.mer> selected="selected"</cfif>> #TimeBlocks.Mer.Value# </option> </cfoutput> </select></cfif>
我使用的吨比这更多,但它们都是特定于应用程序/对象的.几乎在任何时候我开始将某些内容写入包含内容,或者如果我发现自己将一个显示逻辑从一个页面复制到另一个页面,我开始考虑如何将该代码推送到自定义标记中.
以下是我认为有用的自定义标记库的一些示例.
> cfUniform
> Ben Nadel’s POI Custom Tags
以上是内存溢出为你收集整理的coldfusion – 使用自定义标记来避免CFM文件与大量HTML标记混合在一起?全部内容,希望文章能够帮你解决coldfusion – 使用自定义标记来避免CFM文件与大量HTML标记混合在一起?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)