ColdFusion循环嵌套英镑符号问题

时间:2012-03-31 04:48:38

标签: coldfusion coldfusion-9

我正在尝试评估两个动态分配的变量;然后尝试根据结果分配动态变量。 我有更长的代码,这是有效的,但我正在努力巩固。

以下是合并代码的内容:

<cfloop list="dog,cat,pig,horse" index="i">      
    <cfif (#trim([i]_FMCTotal)# /2) GT #trim([i]_FMC)#>
        <cfset #i#colorCode = 'red'>
    <cfelseif (#trim([i]_FMCTotal)# /1.5) GT #trim([i]_FMC)#>
        <cfset #i#colorCode = 'yellow'>
    <cfelse>
        <cfset #i#colorCode = 'green'>
    </cfif>  
</cfloop>

2 个答案:

答案 0 :(得分:7)

由于您有一些无效的CFML结构(例如[i]_FMCTotal不是有效的变量名称),因此您发布的代码中没有太多内容会通过解析器。在条件语句中也不需要使用哈希值,哈希值用于输出。

要回答问题evaluate(),但更可读,安全且可维护的解决方案是利用颜色代码的结构。

<cfset colorCodes = {}>
<!--- presuming ..._FMCTotal and .._FMC are reworked as structs also --->
<cfloop list="dog,cat,pig,horse" index="i">      
    <cfif (FMCTotal[i] /2) GT trim(FMC[i])>
        <cfset colorCode[i] = 'red'>
    <cfelseif (trim(FMCTotal[i] /1.5) GT trim(FMC[i])>
        <cfset colorCode[i] = 'yellow'>
    <cfelse>
        <cfset colorCode[i] = 'green'>
    </cfif>  
</cfloop>

这样的结果将是一个数据结构,您可以从中轻松访问后续代码中的任何项目值

{ // possible result
    'pig': 'green'
  , 'cat': 'yellow'
  , 'dog': 'red'
  , 'horse': 'green'
}

colorCode['dog'] // => 'red'

如果您无权重写_FMC变量,您可以评估那些evaluate('#i#_FMCTotal'),但是对于这些变量使用集合会更加清晰,就像在我的示例中一样。

答案 1 :(得分:1)

菲尔是对的 - 你的语法不正确。如果您正在尝试使用

看看变量pig_FmcTotal除以2是否大于pig_FMC,那么你应该做类似的事情:

<cfif val(variables[i & '_FMCTotal']) / 2 gt val(variables[i & '_FMC'])>

我假设_FMC实际上是一个字符串,但如果它是一个变量,你将删除上面的单引号。使用括号表示法并在括号内连接键名称。还有其他方法可以做到这一点(例如评估)。

说到设置它是相同的例程:

<cfset variables[i & colorscheme] = 'green'/>
祝你好运。

相关问题