2010-01-06 3 views
6

Есть ли лучший способ написать следующее?Оценка функции

<cfloop list="#qry.Columnlist#" index="FieldName"> 
    <cfset "form.#FieldName#" = Evaluate("qry.#FieldName#")> 
</cfloop> 

Этот цикл присваивает каждому полю в запросе соответствующее поле формы. Я понимаю, что функция оценки избегана.

ответ

11
<cfloop list="#qry.Columnlist#" index="FieldName"> 
    <cfset form[FieldName] = qry[FieldName][1]> 
</cfloop> 

?

+1

Хороший ответ! Я тоже искал решение для этого сегодня. –

+0

Как насчет 'оценка (" qry. # MyArr [i] .foo # ")' Я пытался 'qry [myArr [i] [foo]]', но не повезло – isurfbecause

+0

@isurfbecause не уверен, что вы спрашиваете, но для объекта массива это '[fieldName] [rowIndex]'. Является ли 'foo' rowIndex? если это так, сначала установите 'myArr [1]' в некоторый var, а затем используйте это. CF может не нравиться вложенным '[]' – Henry

4

Предполагая, что вы возвращаете один набор записей, будет работать следующее.

<cfloop list="#qry.Columnlist#" index="FieldName"> 
<cfset "form.#FieldName#" = qry[FieldName][1]> 
</cfloop> 
+1

Технически, в этом нет ничего плохого. Но вы также можете пройти весь путь и использовать обозначение массива для обеих сторон cfset;) – Leigh

+0

Хорошая точка. :). – jarofclay

1

Tangential, но если вы перебираете несколько строк запроса, вы можете использовать переменную currentRow в объекте запроса, чтобы сделать то же самое, что и принятый ответ.

<cfset var someStruct = {} /> 
<cfset var colummnList = queryObj.columnList /> 

<cfloop query="queryObj"> 
    <cfset someStruct[currentRow] = {} />   

    <cfloop list="#columnList#" index="fieldName"> 
     <cfset someStruct[currentRow][fieldName] = queryObj[fieldName][currentRow] /> 
    </cfloop> 
</cfloop> 
+0

Очень интересно. Я получаю запутанное смешивание нотации структуры и массива, но я рассмотрю это. Благодаря! –

+0

Я сожалею, {} является сокращением для StructNew() и [] является сокращением для ArrayNew (1) – Bialecki

Смежные вопросы