ColdFusion在从函数返回时向字符串添加空格,但在分配给变量时不添加空格

时间:2016-05-27 21:38:31

标签: coldfusion

如果我写

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

我最终得到了

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

但如果我写

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

我最终得到了

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

有谁知道为什么或如何防止它发生?对我来说,这两个代码应该完全相同。

我在cflive中运行了这个代码并且它产生了相同的结果,所以我不认为这是“我的代码”弄乱的东西。好像CF的运作方式,但似乎不正确。

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

您可以在功能中关闭输出:

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

或使用cfsilent关闭输出:

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

或通过消除函数中的空格:

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

或将功能转换为cfscript

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

至于发生了什么:

您正在生成的HTML正在输出到缓冲区 - 当ColdFusion处理任何不在cf标记中的内容时,它将直接输出到此缓冲区,除非您告诉ColdFusion禁止此输出。

所以,如果你这样做:

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

然后每次调用testfun()都会将Append to Buffer附加到输出缓冲区(当你在函数范围内时),然后cfreturn将被处理,函数将返回函数作用域中的剩余代码(在return语句之后)将被忽略。然后,作用域将返回到调用作用域,然后可以使用返回的值执行某些操作(注意:输出到缓冲区的文本不是函数的返回值的一部分)。

输出结果为:

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

因此对cfset中函数的调用会输出不在函数内的cf标签中的文本,但会将其输出到调用函数的位置,而不是输出返回值的位置