3

我们正在运行 ColdFusion MX7。

我们遇到的一个问题是我们在很多页面中使用了很多功能。让它们存在于“全球”ColdFusion 范围内而不是必须将它们包含在我们所有的页面中会很好。

有没有不涉及自定义标签等的方法?

我知道我们可以将一些对象附加到应用程序或服务器范围,但是我们必须照此引用它们。

只需将它们添加到全局范围就很完美了。

编辑

感谢这些建议,这就是我想出的。基本上,对于 OnRequestStart 函数中的每个请求,将函数引用 (this.functionName) 分配给客户端范围内正确命名的变量。

应用程序.cfc:

<cfcomponent OUTPUT="FALSE">
<cfset This.name = "MyApp">
<CFSET This.clientManagement = true>
<CFSET This.SessionManagement = true>

<CFFUNCTION NAME="Coalesce" OUTPUT="FALSE" access="public">
    <CFARGUMENT NAME="ARG1">
    <CFARGUMENT NAME="ARG2">

    <CFIF ARG1 NEQ "">
        <CFRETURN ARG1>
    <CFELSE>
        <CFRETURN ARG2>
    </CFIF>
</CFFUNCTION>

<cffunction name="onRequestStart">
    <CFSET CLIENT.COALESCE = this.COALESCE>
</cffunction>

</cfcomponent>

此应用程序下的页面愉快地响应调用:

<CFOUTPUT>#COALESCE("ONE","TWO")#</CFOUTPUT>

效果很好!

4

2 回答 2

6

没有“全球范围”之类的东西。

如果您正在讨论每个页面中的变量范围,您可以尝试将 UDF 包含在 Application.cfm 中。

如果您使用 Application.cfc,请在 CF7 文档中查找 onRequest()。

于 2009-06-25T20:22:54.800 回答
2

我很满意的一个选项是在 Application.cfc 中创建一个服务(或类似名称)组件。将所有功能添加到此组件中,并在创建应用程序时创建它。这将缩短加载时间,因为函数被缓存在应用程序中,并且还使该应用程序中的任何文件都可以访问这些函数。当然,您需要调用 application.services.myUsefulFunction() 之类的函数

于 2009-06-25T20:26:51.937 回答