【发布时间】:2012-12-15 23:39:04
【问题描述】:
我正在将一个旧网站转换为 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>
我已将 structKeyExists(variables.instance, local.col) 替换为使用 'getMetaData()' 对我们当前属性的方便评估,但我在下一行遇到问题:<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#')" />
但这似乎很复杂且容易出错(也必须转义字符串中的任何“'”)。
使用查询加载部分或全部 CFC 属性而无需显式调用 this.setPROPERTYNAME(query.COLUMN) 可能数十次的最佳方式是什么????
【问题讨论】: