2009-06-10 7 views

Antwort

16

Kurze Antwort: Es spielt keine Rolle.

cfscript gibt nichts aus, wenn Sie writeOutput() nicht explizit aufrufen. Dies umfasst Funktionen in cfscript sowie beliebigen cfscript Code außerhalb einer Funktion.

Dies unterscheidet sich von der CF-Tags-Syntax, die standardmäßig mindestens Leerzeichen zwischen den Tags ausgibt. In cfscript wird jeder von Ihnen geschriebene Text von der CFML-Engine kompiliert. In CF-Tags wird jeder von Ihnen geschriebene Text in den Ausgabepuffer geschrieben und an den Browser gesendet.

Lange Antwort: Es ist das gleiche wie kein Ausgabeattribut anzugeben.

cfscript Blöcke geben nichts aus. Alle Tag-Blöcke geben, wenn sie nicht in cfsilent eingeschlossen sind, nur Leerzeichen aus. Ja, sogar cffunctions, aber die Ausgabe wird verworfen, wenn das Ausgabeattribut auf false gesetzt ist.

Die Essenz von Peter Boughtons Antwort ist korrekt. Es ist weder in cfsilent noch in cfoutput verpackt. Die Ausgabe ist nicht verboten, aber es geschieht nicht, es sei denn, Sie tun es explizit.

Sie können immer eine Tag-basierte cffunction mit Scripting kombinieren, um das Beste aus beiden Welten zu erhalten. Etwas wie...

<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> 

Auf diese Weise können Sie auch einen Ausgang und den Zugriff auf die cffunction Tag angeben als Argumente erlauben optional zu sein (die Sie nicht durch cfscript Funktionen tun können), dann den Körper mit cfscript füllen, var Aussagen einschließlich und die Funktion zurückgeben.

Natürlich, für diese Funktion, wenn Sie das Attribut output entfernen oder zu true ändern, es wird Ausgang „test“ vor der Rückkehr.

+1

In CF9 können in cfscript definierte Funktionen optionale Argumente haben. Siehe [Definieren von Komponenten und Funktionen in CFScript] (http://help.adobe.com/de_DE/ColdFusion/9.0/Developing/WSE99A664D-44E3-44d1-92A0-5FDF8D82B55C.html). –

+0

Leider stimmt das nicht wirklich. Gehen Sie weiter und führen Sie ein 'SerializeJSON()' auf einem ORM-Ergebnis in einer cfscript-Funktion aus, und Sie sehen 3 Leerzeilen. In einem 'cffunction' mit' output = 'no'' gibt es kein Leerzeichen. – Nucleon

+0

Änderung - Sie können output = "no" auf eine cfscript-Funktion setzen, um dieses Verhalten zu unterdrücken. – Nucleon

1

Ich bin mir nicht ganz sicher, aber meine Vermutung wäre, dass Skriptfunktionen die gleichen sind wie cffunction Tags in dieser Hinsicht - in der Standardeinstellung ist weder true noch .

Einstellen des output Attribut für eine cffunction, sind die folgenden der Fall:

  • true auf die Funktion äquivalent ist in cfoutput gewickelt wird.
  • false entspricht der Funktion, die in cfsilent verpackt ist.
  • Die Standardeinstellung (nicht definiert) entspricht dem Standardcode, der weder mit cfoutput noch mit cfsilent verpackt ist.

Allerdings habe ich so gut wie nie cfscript verwenden, und dies nicht der Fall kann tatsächlich sein - wir müssen für die anderen warten, um zusammen zu kommen und entweder bestätigen oder diese korrigieren.

4

cfscript-Funktionen sind ein seltsamer Affe. Sie sind eine Art von beiden. Sie können nicht angeben, dass sie output = "false" sind, aber sie sind, bis Sie eine writeOutput() verwenden, aber sie werden von cfcexplorer als output = "true" gemeldet. Es ist ein merkwürdiges Thema, denke ich, dass der cfml-Beratungsausschuss gerade jetzt schaut.

+0

Ich denke, das ist die richtige Antwort, aber kann jemand bestätigen? Danke. – Henry

+0

Eigentlich würde ich sagen, sowohl Peter Boughtons Antwort als auch meine Antwort sind korrekter. –