Вопрос о вложенном знаке фунта в цикле ColdFusion - PullRequest
1 голос
/ 31 марта 2012

Я пытаюсь оценить две динамически назначенные переменные;затем попытка назначить динамическую переменную на основе результата.У меня гораздо больше кода, где это работает, но я пытаюсь объединить.

Вот что у меня есть для сводного кода:

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

7 голосов
/ 31 марта 2012

Не так много кода, который вы опубликовали, будет проходить через синтаксический анализатор, поскольку у вас есть несколько недопустимых конструкций 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 голос
/ 31 марта 2012

Фил прав - ваш синтаксис неверен.Если то, что вы пытаетесь сделать с

, показывает, что переменная pig_FmcTotal, деленная на 2, больше, чем pig_FMC, то вы должны делать что-то вроде:

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

Я предполагаю, что _FMC на самом деле здесь строка, но если бы это была переменная, вы бы удалили одиночные кавычки выше.Используйте обозначения в скобках и объедините имя ключа в скобках.Есть и другие способы сделать это (например, оценить).

Когда дело касается настройки, это та же самая процедура:

<cfset variables[i & colorscheme] = 'green'/>

Удачи.

...