古いサイトを CF 10 に変換しており、ヘルパー コードの一部を前に出したいと考えていました。
コードはクエリを見て、インスタンスにあるものを見つけて、それらを設定します。
<cffunction name="populateSelf">
<cfargument name="source" type="query" required="yes" />
<cfif arguments.source.recordcount EQ 1>
<cfloop list="#arguments.source.columnlist#" index="local.col">
<cfif structKeyExists(variables.instance, local.col)>
<cfset variables.instance[local.col] = arguments.source[local.col]) />
</cfif>
</cfloop>
</cfif> <!--- one record? --->
</cffunction>
「getMetaData()」を使用して、現在のプロパティの便利な評価に置き換えましたstructKeyExists(variables.instance, local.col)
が、次の行で問題が発生しています。<cfset variables.instance[local.col] = arguments.source[local.col]) />
に変更すると<cfset this[local.col] =arguments.source[local.col] />
、暗黙的なセッターが無視され、結果が this スコープに入れられます...
セッターを呼び出すために、次のコードを試しました。
<cfset setValue =arguments.source[local.col] />
<cfset evaluate("set#local.col#('#setValue#')" />
しかし、これは複雑でエラーが発生しやすいようです (文字列内の "'" もエスケープする必要があります)。
this.setPROPERTYNAME(query.COLUMN)
おそらく数十回明示的に呼び出すことなく、クエリを使用して CFC プロパティの一部またはすべてをロードする最良の方法は何ですか????