coldfusion - ColdFusion-将查询转换为CFC setter

标签 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>

我已经使用'getMetaData()'对当前属性进行了方便的评估来替换了structKeyExists(variables.instance, local.col),但是我在下一行遇到了麻烦:<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#')" />

但这似乎很复杂且容易出错(也必须转义字符串中的所有“'”)。

使用查询来加载某些或所有CFC属性而不必显式调用this.setPROPERTYNAME(query.COLUMN)可能数十次的最佳方法是什么???

最佳答案

因此,如果我正确地阅读了所有这些内容,那么您的问题实际上是“如何动态调用方法?”,而其余所有内容都是敷料?

您可以使用字符串设置动态变量名称,然后为其设置函数引用,然后通过该引用调用该函数:

myMethodName = "set#local.col#";
myMethodReference = this[myMethodName];
myMethodReference(arguments.source[local.col]);

关于coldfusion - ColdFusion-将查询转换为CFC setter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14107909/

相关文章:

java - 将 GoCardless Java 库与 ColdFusion 结合使用时出现 ClassCast 异常

mysql - ColdFusion 和 MySql 日期格式

mysql - 如何使用 Coldfusion 将 ID 号插入到数据库中的空白表中

coldfusion - cfwheels - 使用复合键表更新嵌套属性

javascript - Javascript 中的 CFML

coldfusion - 如何修复 cfspreadsheet 中存储为文本的数字

sql-server-2008 - 锁定用户记录并防止编辑?

apache - 如何使 cfimage 在 Apache 上与 ColdFusion 10 一起工作?

mysql - Coldfusion 10 和 mysql - 解密以前存储的数据时出现问题

Coldfusion 使用 cfheader 在 CF10 和 CF11 上输出相同的文件不同