是否可以使用参数动态填充CFC?
问题描述:
下面的代码错误:是否可以使用参数动态填充CFC?
<cfdbinfo datasource="#Application.DSN#" name="getCols" type="columns" table="#this.tableName#">
<cftry>
<cfquery name="getColumnDetails" dbtype="query">
SELECT COLUMN_NAME,TYPE_NAME
FROM getCols
WHERE IS_PRIMARYKEY = 'NO'
</cfquery>
<cfcatch>
<cfset this.ErrorState = true>
<cfthrow message="General DB Error">
</cfcatch>
</cftry>
<cfloop query="getColumnDetails">
<cfargument name="#getColumnDetails.COLUMN_NAME#" displayName="values" type="Any" required="false" />
</cfloop>
,但我真的想知道是否可以动态地设置参数为CFC —还是更简单地传递一个struct和处理呢?
感谢
罗布
答
一种方式我一直试图做类似的事情,你在做什么,是沿着这些路线的东西:
<cffunction name="doSomethingWithDatabase">
<cfargument name="potentialColumns" type="string">
<cfargument name="columnValues" type="struct">
,然后遍历潜在列的列表,在列表中使用的每个元素要在columnValues结构中搜索的索引。如果该值存在于结构中,那么你会很好;否则,您会忽略更新中的该列。
你再调用函数是这样的:
得到你正在寻找
列交替,你可以不理会potentialColumns说法,只是得到的信息你的cfc:
<cffunction name="doSomethingWithDatabase">
<cfargument name="columnValues" type="struct">
<cfset potentialColumns = getMyColumns()>
.... loop....
答
没有机会!
正如你所说的,两种方式并没有定义cfargument标签,而是使用StructKeyExists(ARGUMENTS,aDynamicName)来查找它们,或者创建一个代码生成器并将这些方法写入文件。
并且对问题标题中的错字表示歉意 - 在星期五这样的星期五会发生这样的事情! – 2009-06-12 15:03:53