2009-06-10 7 views

Respuesta

16

Respuesta corta: No importa.

cfscript no genera nada a menos que explícitamente llame a writeOutput() desde allí. Esto incluye funciones en cfscript, así como cualquier código cfscript fuera de una función.

Esto es diferente de la sintaxis de las etiquetas CF, que, de forma predeterminada, da como resultado al menos espacios en blanco entre las etiquetas. En cfscript, cualquier texto que escriba será compilado por el motor CFML. en las etiquetas CF, cualquier texto que escriba se escribirá en el búfer de salida y se enviará al navegador.

Respuesta larga: Es lo mismo que no especificar un atributo de salida.

cfscript bloques no dan salida a nada. Cualquier bloque de etiquetas, a menos que esté envuelto en cfsilent, da como resultado espacio en blanco si nada más. Sí, incluso las funciones lo hacen, pero la salida se descarta si el atributo de salida se establece en falso.

La esencia de la respuesta de Peter Boughton es correcta. No está incluido en cfsilent ni cfoutput. La salida no está prohibida, pero no sucede a menos que lo hagas explícitamente.

Siempre puede combinar una etiqueta basada en cffunction con scripts para obtener lo mejor de ambos mundos. Algo como...

<cffunction name="x" output="false" access="package"> 
    <cfargument name="y" type="string" required="false" default="YY" /> 
    <cfscript> 
     var someValue = y & "something"; 
     writeOutput("test"); // this will not be written 
     return someValue; 
    </cfscript> 
</cffunction> 

Esto le permite especificar una salida y el acceso en la etiqueta cffunction, así como permitir argumentos para ser opcionales (que no se puede hacer a través cfscript funciones), a continuación, llenar el cuerpo con cfscript, incluyendo las declaraciones y var la función vuelve.

Por supuesto, para esa función, si se quita el atributo output o cambiarlo a true, que se salida "test" antes de regresar.

+1

En CF9, las funciones definidas en cfscript pueden tener argumentos opcionales. Consulte [Definición de componentes y funciones en CFScript] (http://help.adobe.com/en_US/ColdFusion/9.0/Developing/WSE99A664D-44E3-44d1-92A0-5FDF8D82B55C.html). –

+0

Lamentablemente, esto no es realmente correcto. Continúa y ejecuta 'SerializeJSON()' en un resultado ORM en una función cfscript y verás 3 líneas de espacio en blanco. En un 'cffunction' con' output = 'no'' no hay espacios en blanco. – Nucleon

+0

Enmienda: puede poner output = "no" en una función de cfscript para silenciar este comportamiento. – Nucleon

1

No estoy del todo seguro, pero creo que ha de ser que la escritura de las funciones son las mismas que las etiquetas cffunction en este sentido - en el que el defecto no es ni true ni false.

se establece el atributo output para un cffunction, los siguientes son el caso:

  • true es equivalente a la función que se está envuelto en cfoutput.
  • false es equivalente a la función que se envuelve en cfsilent.
  • Dejarlo predeterminado (indefinido) es equivalente al código estándar que no está incluido con cfoutput ni cfsilent.

Sin embargo, casi nunca utilizar cfscript, y esto no puede ser en realidad el caso - que tendremos que esperar a que otros vengan y, o bien confirmar o corregir esto.

4

Las funciones de cfscript son un mono raro. Son una especie de ambos. No puede especificar que son output = "false", pero lo son hasta que use writeOutput(), pero cfcexplorer informa que se trata de output = "true". Es un problema extraño que creo que el comité asesor de cfml está considerando en este momento.

+0

Creo que esta es la respuesta correcta, pero ¿alguien puede confirmarlo? gracias. – Henry

+0

En realidad, diría que tanto la respuesta de Peter Boughton como mi respuesta son más correctas. –

Cuestiones relacionadas