如果我写
<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>
答案 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
标签中的文本,但会将其输出到调用函数的位置,而不是输出返回值的位置