2009-06-25 30 views
3

ColdFusion MX7を実行しています。ColdFusionで共通の関数を格納する場所

1つの問題は、多くのページで多くの機能を使用できることです。私たちのすべてのページにそれらを含めるのではなく、「グローバルな」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> 
素晴らしい作品

+2

私のために素晴らしい仕事をしている「が、その後、私たちはそのように参照する必要があります。」ではなく、本当に。 CFはアプリケーションスコープ内の関数を探します。 アプリケーションスコープ内にfuncA()がある場合は、funcA()を呼び出すだけで動作します。 Application.funcA()を呼び出す必要はありません – Henry

+0

(application.cfcを使用して)アプリケーションスコープから応答する公開関数を取得できませんでした。私は何か見落としてますか? –

+0

使い終わったコードを共有してくれてありがとう。質問に追加する代わりに、答えとして投稿する必要があります。 –

答えて

6

「グローバルスコープ」はありません。

すべてのページで変数の範囲について説明している場合は、UDFのApplication.cfmを含めることができます。

Application.cfcを使用する場合は、CF7ドキュメントのonRequest()を参照してください。

+0

'Global Scope'とは、CFがnow()のような標準関数を置くスコープを意味します。私はそれがどこに保管されているのか分からない。 –

+0

さて、「魔法のグローバルスコープ」には私たちがアクセスできません。 :) – Henry

+0

まあそれはうまくいくはずです。; o) –

2

私が満足しているオプションは、Application.cfcにサービス(または類似の名前の)コンポーネントを作成することです。このコンポーネントにすべての関数を追加し、アプリケーションの作成時に作成します。これにより、関数がアプリケーション内にキャッシュされ、そのアプリケーション内の任意のファイルに関数がアクセスできるようになるため、ロード時間が向上します。もちろん、application.services.myUsefulFunction()のような関数を呼び出す必要があります。

関連する問題