Dinâmica Nomes ColdFusion Variável
-
19-09-2019 - |
Pergunta
Ei, eu estou tendo um pouco de uma negociação problema com nomes de variável dinâmica. O que está acontecendo é que tenho um CFC que constrói parte do formulário para me utilizando alguns dados em uma tabela. Então o cfc envia código de volta do formulário para a página como uma string. Bem, eu preciso valores atribuir a estes campos de forma que as pessoas não substituir os dados. Eu estou puxando os dados na função no cfc. Então, eu estou tentando jogar esta variável dinâmica na seqüência e está atrapalhando as coisas para mim. Eu continuo recebendo um erro dizendo
A CFML variable name cannot end with a "." character.
Aqui está o código que estou usando isso me dá o erro. Eu não estou muito experiente com a programação eu não tenho feito isso por muito tempo. Assim, qualquer entrada seria fantástico.
<!--- ================================================================== --->
<cfargument name="catFormQuery" type="query" required="yes">
<cfargument name="listingID" required="yes">
<cfset var getListingInformation = "">
<cfset var returnVar = "">
<cfset var fieldValue = "">
<cfset var catNameNoSpace = "">
<!--- get the listing Information --->
<cfquery name="getListingInformation" datasource="backEndDSN">
Select * from listings
where listingID = #arguments.listingID#
</cfquery>
<cfoutput query="arguments.catFormQuery">
<!---====================--->
<!--- Set catNameNoSpace --->
<!---====================--->
<cfset catNameNoSpace = replaceNoCase(arguments.catFormQuery.catName, " ", "_")>
<!---==========--->
<!--- for text --->
<!---==========--->
<cfif arguments.catFormQuery.catType eq 'text'>
<cfset returnVar = returnVar & #arguments.catFormQuery.catName# & ": <input type='text' name='#catNameNoSpace#' value=" & getListingInformation.#catNameNoSpace# & "><br />">
</cfif>
De qualquer forma, se você pode me dar qualquer entrada ou conselhos que seria ótimo. Muito obrigado.
O código é bem aqui na parte inferior.
<cfset returnVar = returnVar & #arguments.catFormQuery.catName# & ": <input type='text' name='#catNameNoSpace#' value=" & getListingInformation.#catNameNoSpace# & "><br />">
Solução
Este trabalho definitivamente não vai, não é CFML válido:
getListingInformation.#catNameNoSpace#
Avaliar é o diabo, mas você pode usar a sintaxe de estilo matriz em vez. A única ressalva é que você precisa especificar explicitamente a linha a partir da qual você deseja que o valor de vir (e se a consulta não tem linhas, isso irá erro fora).
getListingInformation[catNameNoSpace][1]
Outras dicas
A resposta de Sixten tem uma sintaxe que você pode usar, mas você ainda precisa tomar cuidado com caracteres inválidos em nomes de variáveis ??como respondida em outro lugar. O melhor guia para variáveis ??está aqui: http: // www. depressedpress.com/Content/Development/ColdFusion/Articles/Variables/Index.cfm , especialmente nesta seção http://www.depressedpress.com/Content/Development/ColdFusion/Articles/Variables/NotationIndexed.cfm
Um pouco diferente, mas pode ser útil para qualquer pessoa olhando para isto:. Você também pode usar variáveis ??[ "staticPartOfVariableName # DynamicPartOfVariableName #"]
Tudo bem, eu acho que eu percebi isso. Eu realmente não gosto de como eu tinha que fazê-lo embora.
evaluate("getListingInformation.#catNameNoSpace#")
Eu ouvi em algum lugar antes que o uso de avaliar é lento e não muito limpo. Existe uma opção melhor?