0

動的変数名で VARIABLES スコープを使用すると、次のエラーが発生します。

Element wlc_period is undefined in a Java object of type class coldfusion.runtime.VariableScope.

このコードを実行しようとすると:

<cfparam name="wlc_period#y#" default="36">

<cfscript>
wlc_period      = VARIABLES['wlc_period#y#'];
</cfscript>

しかし、私が使用するevaluate()と、それは動作します:

<cfscript>
wlc_period      = evaluate('wlc_period#y#');
</cfscript>

実行時には、変数yは空の文字列ですが、コードはループ内の別の場所で使用されるため、1 ~ 5 の整数が入力されることがあります。

コードはwlc_periodにアクセスしようとしているはずです。これは、単純なダンプを実行するだけで機能します。

<cfparam name="wlc_period#y#" default="36">

<cfscript>
writedump(wlc_period);
</cfscript>

evaulate() の代わりに VARIABLES スコープを使用したいのですが、何か不足していますか?

4

2 に答える 2

1

次のコードは、期待どおりに機能します。

<cfset y = "">
<cfparam name="wlc_period#y#" default="36">

<cfscript>
   wlc_period      = VARIABLES['wlc_period#y#'];
</cfscript>

<cfdump var="#wlc_period#">

.cfm ファイルにそれしかない場合、それでうまくいきますか?

あなたが経験している問題は、あなたが投稿したコードとは無関係であると思われます。

于 2012-07-17T16:32:17.663 に答える
0

VARIABLESスコープが何であるかを誤解していると思います。あるいは、実際のスコープ変数とは何か。

スコープ変数は、特定のセットに格納される値です。たとえば、FORMスコープは FORM ポストから渡されたすべての値を格納します。URLスコープには、URL のクエリ文字列で渡されたすべての値が格納されます。

VARIABLES スコープは、ColdFusion コンポーネント (CFC) で使用するためのものです。これは、特定の CFC プロパティを再利用可能にし、非公開にするために使用されます。VARIABLES スコープは、すべての変数を格納する単なるオブジェクトではありません。

コードを見ると、wlc_period#y設定しているローカル変数にすぎません。値を Local スコープに格納することをお勧めします。ローカル変数に「LOCAL」を使用するのが好きです:

<cfparam name="LOCAL.wlc_period#y#" default="36">

<cfscript>
wlc_period      = LOCAL['wlc_period#y#'];
</cfscript>

おそらくy同様にスコープする必要があります。

このように変数を適切にスコープすると、複数のスコープが同じ変数を持つという問題に遭遇するのを回避できます。

于 2012-07-17T13:26:07.183 に答える