怪胎说:
如果你觉得你需要有很多的争论,考虑创建一个CT代替。 ..。 CT比自定义功能更强大、更灵活。试着在简单的事情上使用UDF..。使用CT和组件处理更复杂的过程,特别是那些您可以认为是离散的操作,而不是简单的“按摩”。
好吧,但你通常是怎么做决定的?有兴趣了解现实生活中的实践和例子。
对我来说,当一个函数有许多不需要的参数时,就会发生这种情况,所以我不得不称它们为myFunc(arg1="foo",arg2="bar")。有时,<cfmodule>语法只是变得更加可读性,但并不总是如此。
另一个原因是我不喜欢长的(比如说,超过两个屏幕的代码)UDF。
但是所有这些想法都是非常主观的,这就是为什么我对阅读别人的观点感兴趣。也许有更好的规则吗?
提前谢谢。
发布于 2009-03-16 12:29:10
社会上可能有很多人不同意我的观点,但我通常是这样想的。如果您需要做的工作涉及到到屏幕上的输出,并且如果用其他代码或文本“包装”它是有意义的,那么定制标记可能是合适的。在所有其他情况下,UDF工作得很好,而且通常更好。话虽如此,在近8年的CF开发过程中,我真的从来没有遇到过一个很好的自定义标签的理由。我不是说这些原因不存在,但我想说它们是罕见的。
如果您有一个很长的UDF,那么您可以通过调用这个UDF (实际上不是返回一个值)来假定这是一个输出到屏幕的东西吗?如果这样做有意义的话,我会考虑将UDF分解成更小、更易于管理的部分,但正如您所暗示的那样,最终最重要的是,对于您、您的团队以及那些可能会跟踪您的人来说,什么是最易读的。
更新:出于好奇,您指的是哪本CFWACK书(版本和卷)以及哪一页?
发布于 2009-03-16 12:37:34
正如我所记得的,可以在任何时候调用自定义标记,在使用它们之前必须定义UDF。这使得自定义标记在一般情况下更容易。如果您有大量的UDF库,那么要确保它们都包含在其中,并且服务器可能很难解析它们(至少在过去),这将是一件很麻烦的事情。
然而,UDFs可以以更紧凑的方式使用。
<cfif myUdf(myVariable)>自定义标记的优点是它们可以很好地与您的标记放在一起。
<h1>Order Page</h1>
<cf_basket_nav>
<ul>
<cfloop ...>
<li>
<cf_basket_item item="#items[i]#">
</li>
</cfloop>
</ul>
</cf_basket_nav>现在,我通常会有一个“utils”CFC,它使用的方法是您的UDF。
发布于 2009-03-27 21:41:56
在udfs或cfc方法上使用自定义标记的一个考虑因素是,当您发现需要传递一个子项目数组时,可以使用嵌套的自定义标记将子自定义标记及其元素与父自定义标记相关联。这使您可以很好地进行简洁的代码编写,这很容易读懂:
<cfmenubar ... >
<cfloop array="menuitems" ...>
<cfmenubaritem url="#i.url#">
#i.label#
</cfmenubaritem>
</cfloop>
</cfmenubar>是的,是的,我知道我们有更好的dhtml的东西,如菜单和标签,这只是指出一个例子。您可以使用自定义标记中的cfassociate将属性“传递”给父自定义标记,然后在executionmode="end“中访问关联属性数组中所有动态生成的子项。在这个例子中,您将循环并将菜单输出到屏幕上。
另外,正如另一位评论,允许你做一些聪明的事情..。我特别使用的一件事是,我设置了prefix="“,然后我基本上可以强制简单的html标记(如标记)在运行时通过自定义标记处理程序被踢出-因此html标记在运行时变得智能.我这样做是为了分析href和目标属性,并决定是否要在链接旁边显示pdf图标(或其他mime类型的图标).它很漂亮!这在内容管理系统中尤其有帮助,或者当7您的html开发人员使用dreamweaver或and时,您希望让他们的标记触发智能coldfusion标记,而不需要他们做标准html之外的任何事情--编辑器不知道有什么不同,他们不需要进入“代码”视图就可以获得一些相当强大的功能。
最后,在自定义标记中,您可以选择抑制输出(或使用缓存),因此这对于环绕动态生成的html.在执行模式EQ "end“模式下访问thistag.generatedcontent变量
别把这个带着洗澡水的孩子扔出去.我同意它们的使用频率要低得多,因为我们有氟氯化碳,但是在定制标签中仍然有一些强大的功能.我通常在每个申请中有一个或两个(至少有几十个氟氯化碳)。
乔恩
https://stackoverflow.com/questions/648674
复制相似问题