2010-05-07 16 views
14

Si hago algo como esto en ColdFusion:¿Por qué ColdFusion agrega espacios en blanco cuando invoco una función en cfoutput?

<cfoutput>foo="#foo()#"</cfoutput> 

El código HTML resultante tiene un espacio delante de él:

foo=" BAR" 

Sin embargo, si no es una función de llamada que trabaja muy bien, es decir, :

<cfset fooOut=foo() /> 
<cfoutput>foo="#fooOut#"</cfoutput> 

da esta salida:

foo="BAR" 

¿De dónde viene este espacio adicional y hay algo que pueda hacer al respecto?


Editar Para aclarar, el espacio no está en el valor devuelto por la función mi foo:

<cffunction name="foo" access="public" returntype="string"> 
    <cfreturn "BAR" /> 
</cffunction> 

Pero también he encontrado que esto no sucede con las funciones incorporadas , es decir:

<cfoutput>"#UCase("bar")#"</cfoutput> 

Prints:

"BAR" 

Sin embargo, sucede si paso la salida de mi función a la función incorporada (esta parte no tiene sentido para mí). es decir .:

<cfoutput>"#UCase(foo())#"</cfoutput> 

Lienzo:

" BAR" 
+0

Esto es definitivamente un truco y no responde su pregunta, pero ¿ha intentado utilizar la función Trim() para eliminar el espacio en blanco? – dbyrne

+0

@dbyrne: lo intenté, pero el valor devuelto por foo() no tiene un espacio para empezar, por lo que el ajuste no hace nada, y luego el resultado de recorte obtiene un espacio agregado a él, al igual que el resultado de foo() – Kip

Respuesta

25

Asegúrese de que tiene atributo de salida define como falsa.

<cfcomponent output="false"> 

    <cffunction name="foo" access="public" returntype="string" output="false"> 
    <cfreturn "BAR"> 
    </cffunction> 

</cfcomponent> 

O bien, hágalo en estilo cfscript, y no se introducirá ningún espacio adicional.

function foo() 
{ 
    return "BAR"; 
} 
+0

Eso lo solucionó, gracias! – Kip

+0

de nada. :) – Henry

+0

¿Alguien sabe por qué el espacio en blanco se agrega? – Leeish

Cuestiones relacionadas