我曾认为在cfscript中定义的CFC方法默认情况下output=false,但是当我在cfcexplorer.cfc中打开CFC时(直接在浏览器中打开CFC),它显示输出:已启用。
cfcexplorer.cfc的Bug?
我曾认为在cfscript中定义的CFC方法默认情况下output=false,但是当我在cfcexplorer.cfc中打开CFC时(直接在浏览器中打开CFC),它显示输出:已启用。
cfcexplorer.cfc的Bug?
简短回答: 没有关系。
cfscript
不会输出任何内容,除非你在其中显式调用 writeOutput()。这包括 cfscript
中的函数以及任何不在函数内的 cfscript
代码。
这与 CF 标签的语法不同,默认情况下,标签之间至少输出空格。在 cfscript
中,你写的任何文本都会被 CFML 引擎编译。在 CF 标签中,你写的任何文本都将被写入输出缓冲区并发送到浏览器。
详细回答: 这与不指定输出属性是相同的。
cfscript
块不会输出任何内容。任何标签块(除非包含在 cfsilent
中)如果没有内容将输出空格。即使 cffunctions 也会输出,但如果设置了 output 属性为 false,则输出会被丢弃。
Peter Boughton 的答案核心是正确的。它既不包含 cfsilent
也不包含 cfoutput
。 输出不是被禁止的,但除非显式执行,否则不会发生。
你始终可以将基于标签的 cffunction
与脚本组合起来,以获得最佳效果。例如...
<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>
这让你可以在 cffunction
标签上指定输出和访问,同时允许参数是可选的(cfscript
函数无法做到这一点),然后用 cfscript 填充其主体部分,包括变量声明和函数返回值。
当然,对于该函数,如果您移除 output
属性或将其更改为 true
,它会在返回之前输出 "test
"。
cfscript函数就像一个奇怪的猴子。它们有点两者兼备。你不能指定它们是output="false",但在使用writeOutput()之前它们就是输出为false的,但是cfcexplorer报告它们为output="true"。我认为这是一个奇怪的问题,CFML咨询委员会正在关注。
我并不完全确定,但我的猜测是,在这方面脚本函数与标签相同 - 默认值既不是也不是。
为设置
然而,我几乎从不使用,这可能并非事实 - 我们必须等待其他人来确认或更正这一点。
SerializeJSON()
,你会看到3行空格。在output='no'
的cffunction
中,没有空格。 - Owen Allen