8

我以为在cfscript中定义为函数的CFC方法默认是output=false,但是当我在cfcexplorer.cfc(浏览器直接打开CFC)中打开CFC时,它显示输出:已启用。

cfcexplorer.cfc 的错误?

4

3 回答 3

18

简短的回答:没关系。

cfscript除非您从中显式调用 writeOutput() ,否则不会输出任何内容。这包括函数内的函数cfscript以及cfscript函数外的任何代码。

这与 CF 标签的语法不同,默认情况下,标签之间至少输出空格。在cfscript中,您编写的任何文本都将由 CFML 引擎编译。在 CF 标签中,您编写的任何文本都将写入输出缓冲区并发送到浏览器。

长答案:这与不指定输出属性相同。

cfscript块不输出任何东西。任何标签块,除非包含在 中cfsilent,否则会输出空格。是的,即使 cffunctions 也可以,但是如果输出属性设置为 false,则输出会被丢弃。

彼得鲍顿回答的本质是正确的。它既没有被包裹在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 填充正文,包括 var 语句和函数返回。

当然,对于那个函数,如果你去掉这个output属性或者把它改成true,它test在返回之前输出“ ”。

于 2009-06-10T21:46:39.763 回答
4

cfscript 函数是一只奇怪的猴子。他们两者兼而有之。您不能指定它们为 output="false",但在您使用 writeOutput() 之前它们是,但 cfcexplorer 将它们报告为 output="true"。这是一个奇怪的问题,我认为 cfml 咨询委员会正在研究。

于 2009-06-10T21:16:42.583 回答
1

我并不完全确定,但我的猜测是脚本函数cffunction在这方面与标签相同 - 因为默认值不是truenor false

设置outputa 的属性cffunction,情况如下:

  • true相当于被包裹的函数cfoutput
  • false相当于被包裹的函数cfsilent
  • 将其保留为默认值(未定义)相当于既不使用cfoutput也不包裹的标准代码cfsilent

但是,我几乎从不使用cfscript,实际上可能并非如此 - 我们必须等待其他人出现并确认或纠正这一点。

于 2009-06-10T20:51:16.770 回答