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# & ":&nbsp;&nbsp;<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# & ":&nbsp;&nbsp;<input type='text' name='#catNameNoSpace#' value=" & getListingInformation.#catNameNoSpace# & "><br />">
Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top