7

次の機能がCF10で機能するのに、CF9では機能しないのはなぜですか?

<cfset out="">
<cfif isQuery( arguments.values ) >
    <cfloop query="#arguments.values#" >            
        <cfset out = '#out#<option value="#value#">#label#</option>'>
    </cfloop>
</cfif>

CF9は、「複雑なオブジェクト型は単純な値に変換できない」と述べています。cfloopを含む行の場合。Coldboxフレームワークを使用していますが、デバッガー情報は、arguments.valuesがラベルと値の列を持つクエリであることを示しています。

4

1 に答える 1

10

CF10より前では、 cfloopのクエリ属性は文字列(クエリの名前)のみであり、変数自体ではありません。

したがって、置く#arguments.values#と、複雑なクエリオブジェクトを文字列に変換して、エラーの原因となる名前を取得しようとします。

クエリ値も許可するように属性が更新されているため、CF10で機能します。


サイドノート:

このコード行は簡略化できます。

<cfset out = '#out#<option value="#value#">#label#</option>'>

に:

<cfset out &= '<option value="#value#">#label#</option>'>

HtmlEditFormatまた、少なくともラベルに*を使用する必要があり、おそらく値も使用する必要があります。

*(またはencodeForHtmlCF10 +でのみ機能する必要がある場合)

于 2012-12-21T00:33:29.080 に答える