Ste*_*rts 6 coldfusion coldfusion-10
我正在将旧网站转换为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>
Run Code Online (Sandbox Code Playgroud)
我已经structKeyExists(variables.instance, local.col)使用'getMetaData()' 替换了我们当前属性的方便评估,但我在下一行遇到问题:<cfset variables.instance[local.col] = arguments.source[local.col]) />
如果我将其更改为<cfset this[local.col] =arguments.source[local.col] />,则忽略隐式setter并将结果放在此范围内...
为了尝试调用我们的setter,我尝试了这段代码:
<cfset setValue =arguments.source[local.col] />
<cfset evaluate("set#local.col#('#setValue#')" />
Run Code Online (Sandbox Code Playgroud)
但这似乎很复杂且容易出错(必须在字符串中转义任何"'").
使用查询加载部分或全部CFC属性的最佳方法是什么,而不必显式调用this.setPROPERTYNAME(query.COLUMN)可能的几十次????
因此,如果我正确地阅读了所有这些内容,那么您的问题实际上是"我如何动态调用方法?",其余所有内容都是固定的?
您可以使用字符串来设置动态变量名称,然后设置一个函数引用,然后通过引用调用该函数:
myMethodName = "set#local.col#";
myMethodReference = this[myMethodName];
myMethodReference(arguments.source[local.col]);
Run Code Online (Sandbox Code Playgroud)
如果要动态调用方法,可以使用cfinvoke
<cfinvoke method="set#property#">
Run Code Online (Sandbox Code Playgroud)
合理?
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |