2016-05-27 10 views
1

zugewiesen Wenn ichColdfusion einen Raum Strings hinzuzufügen, wenn von der Funktion zurückgegeben, aber nicht, wenn die Variablen

<section id="banner" class="#getBannerClass()#">

ich am Ende mit

<section id="banner" class=" classname">

schreibe Aber wenn ich

schreiben
<cfset test = getBannerClass() /> 
<section id="banner" class="#test#"> 

Ich lande mit

<section id="banner" class="classname">

Sie jemand wissen, warum oder wie man es verhindern? Für mich sollten beide Codes exakt gleich laufen.

Ich habe diesen Code in cflive ausgeführt und es ergab das Ergebnis das gleiche, also glaube ich nicht, dass es irgendetwas mit "meinem Code" ist, der mit Sachen herumhantiert. Es scheint, als ob CF funktioniert, aber es scheint falsch zu sein.

<cffunction name="testfun"> 
    <cfreturn 'myClass' /> 
</cffunction> 
<cfoutput> 
    <div class="#testFun()#">#testFun()#</div> 
    <cfset classOutput = testFun() /> 
    <div class="#classOutput#">#classOutput#</div> 
</cfoutput> 
+0

Versuchen Sie 'class =" # TRIM (getBannerClass()) # ">' – TRose

+0

Versucht, dass. immer noch ein Raum. Das war auch mein erster Gedanke. Es macht keinen Sinn, dass der Raum dort ist, aber nicht der andere. – Leeish

+0

In Ihrem Beispiel - wenn Sie '#Len (getBannerClass) # ausgeben' schließt es den Platz in der Länge des Ergebnisses ein? – TRose

Antwort

3
<cffunction name="testfun" output="false"> 
    <cfreturn 'myClass' /> 
</cffunction> 
+0

Ok. Ich freue mich auf Ihre Antwort. Gibt es einen Grund, warum oder ist es ein "Bug", weil ich denke, dass es keinen Platz geben sollte. Vor allem, um es mit einer Trimmung zu wickeln. Gibt es den Whitespace aus, der tatsächlich "innerhalb" der Funktion ist, aber wenn ja, warum entfernt er ihn nicht? – Leeish

+0

@Leeish etwas ähnliches wurde zuvor auf SO gefragt; Ich konnte keine wirkliche Erklärung finden. http://stackoverflow.com/questions/2791813/why-is-coldfusion-adding-whitespace-when-i-call-a-function-in-cfoutput – TRose

+0

Danke Ich denke, ich habe nicht mit den richtigen Bedingungen zu suchen Das hier. – Leeish

3

Sie können Ausgang drehen in der Funktion aus:

<cffunction name="testfun" output="false"> 
    <cfreturn 'myClass'/> 
</cffunction> 

oder den Ausgang ab mit cfsilent:

<cfsilent> 
<cffunction name="testfun"> 
    <cfreturn 'myClass'/> 
</cffunction> 
</cfsilent> 

oder durch die Leerzeichen aus der Funktion zu beseitigen:

<cffunction name="testfun" 
    ><cfreturn 'myClass' 
/></cffunction> 

oder Umwandlung der Funktion cfscript:

<cfscript> 
    function testfun(){ 
    return 'myclass'; 
    } 
</cfscript> 

Als für das, was passiert ist:

Die HTML Sie generieren ist ausgegeben wird zu einem Puffer - wenn Coldfusion alles verarbeitet, die nicht in ein cf ist Tags werden dann direkt in diesen Puffer ausgegeben, es sei denn, Sie weisen ColdFusion an, diese Ausgabe zu unterdrücken.

Also, wenn Sie tun:

<cffunction name="testfun">Append to Buffer<cfreturn 'Return Value' /></cffunction> 

Dann wird jeder Anruf testfun() wird Append to Buffer an den Ausgangspuffer anhängen (während Sie in der Funktion des Umfangs sind) und dann die cfreturn verarbeitet wird und die Funktion zurückkehren und Jeder verbleibende Code im Funktionsumfang (nach der return-Anweisung) wird ignoriert. Der Bereich wird dann zum aufrufenden Bereich zurückkehren, der dann etwas mit dem zurückgegebenen Wert tun kann (hinweis: die Textausgabe an den Puffer ist nicht Teil des Rückgabewerts von der Funktion).

würde der Ausgang sein:

<div class="Append to BufferReturn Value">Append to BufferReturn Value</div> 
Append to Buffer 
<div class="Return Value">Return Value</div> 

der Aufruf der Funktion in cfset tut Ausgabe der Text nicht in einem cf-Tag innerhalb der Funktion So aber es wird ausgegeben es, wo die Funktion aufgerufen wird und nicht dort, wo die Rückgabewert wird ausgegeben.