Мы запускаем ColdFusion MX7.Где хранить общие функции в ColdFusion
Одна из проблем заключается в том, что у нас есть много функций, которые мы используем на многих наших страницах. Было бы неплохо, если бы они жили в глобальной области ColdFusion, а не включали их на всех наших страницах.
Есть ли способ сделать это, который не включает пользовательские теги или тому подобное?
Я знаю, что мы могли бы прикреплять некоторые объекты к областям приложений или серверов, но тогда мы должны ссылаться на них как таковые.
Просто добавление их в глобальную сферу было бы идеальным.
EDIT
Благодаря предложениям, вот что я придумал. В принципе, для каждого запроса в функции OnRequestStart назначьте правильно названную переменную в области клиента ссылку на функцию (this.functionName).
Application.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>
Работает отлично!
«но тогда мы должны ссылаться на них как таковой.», А не на самом деле. CF будет искать функцию в области приложений для вас. Итак, если у вас есть funcA() в области приложения, вы можете просто вызвать funcA(), и он будет работать. Вам не нужно вызывать Application.funcA() – Henry
Мне не удалось получить публичную функцию для ответа из области приложения (с помощью application.cfc). Я что-то пропустил? –
Спасибо, что поделились кодом, которым вы закончили пользоваться. Вместо того, чтобы добавлять его к вопросу, вы должны опубликовать его в качестве ответа. –