【问题标题】:Is it possible to dynamically populate a CFC with arguments?是否可以使用参数动态填充 CFC?
【发布时间】:2009-06-12 15:03:14
【问题描述】:

以下代码错误:

<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 动态设置参数 - 还是直接传入一个结构并处理它更好?

谢谢
抢

【问题讨论】:

  • 并对问题标题中的错字表示歉意 - 周五 4 点这样的事情肯定会发生!
  • @robdudley:你可以随时在这里编辑你自己的东西。如果有足够的声望,你也可以编辑其他人的东西。 ;-) 据我所知,CFC 不能有参数,我认为您指的是 s?

标签: data-structures dynamic coldfusion arguments cfc


【解决方案1】:

不太可能。

正如您所说,有两种方法,不定义 cfargument 标记,而是通过 StructKeyExists(ARGUMENTS, aDynamicName) 查找它们,或者创建代码生成器并将这些方法写入文件。

【讨论】:

    【解决方案2】:

    我尝试做与您正在做的事情类似的事情的一种方法是按照以下思路:

    <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....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      相关资源
      最近更新 更多