Если серия запросов создается так:
<cfloop list="#platform_list#" index="x">
<cfquery name="#trim(x)#" dbtype="query">
<!--- stuff to build the query --->
</cfquery>
</cfloop>
и затем я возвращаю запросы в структуре примерно так:
<cfset queries_RET = StructNew() />
<cfloop list="#platform_list#" index="x">
<cfif StructKeyExists(args, #trim(x)#)>
<!--- here's where I think things go horribly wrong --->
<cfset queries_RET[x] = #x# />
</cfif>
</cfloop>
<cfreturn queries_RET />
А затем, когда я возвращаюсь к вызывающей функции как "graphData", я пытаюсь получить к ней доступ так:
<cfloop list="#platform_list#" index="x">
<cfif StructKeyExists(url, x) and StructKeyExists(graphData, x)>
<cfloop query="graphData[x]">
Я получаю сообщение об ошибке в последней строке:
Attribute validation error for tag cfloop.
The value of the attribute query, which is currently graphData[x], is invalid.
Значением структуры в graphData [x] является строка, имеющая то же значение, что и имя элемента ... так что мне делать, чтобы вместо этого назначить запрос с этим именем? Я уверен, что это смехотворно очевидно. (
EDIT
Я дам ответ Шону, хотя я наконец-то понял, в чем заключаются мои основные проблемы. Во-первых, я не осознавал, что
<cfset queries_RET[x] = #x# />
фактически не присваивает запрос элементу в точке x, но вместо этого ссылается на него. Чтобы назначить объект запроса, мне нужно сделать следующее:
<cfset queries_RET[x] = #Evaluate(x)# />
Во-вторых, когда структура возвращается вызывающей функции, вызывается
<cfloop list="#Application.platform_list#" index="x">
<cfloop query="#graphData[x]#">
не сработало, потому что атрибут запроса cfloop ищет ссылку на объект запроса --- а объект запроса, которого он искал, не существует, так как он не был возвращен ,
Наконец, теперь, когда я на самом деле возвращаю действительный объект запроса, этот атрибут запроса все еще не работает, потому что теперь graphData [x] не является ссылкой. Чтобы это работало, я должен сначала назначить ссылку и использовать ее в качестве атрибута запроса в cfloop:
<cfloop list="#Application.platform_list#" index="x">
<cfset thisQuery = #graphData[x]#>
<cfloop query="thisQuery">
Я думаю, что моей фундаментальной проблемой было не понимание того, что атрибут запроса не является реальным объектом запроса, а вместо этого ссылается на один. Это была кривая обучения!