我正在尝试在模板中定义一个函数,但有时会调用模板两次。我试过了
<cfscript>
if (not isdefined("tested")) {
string function tested(required string component) output="false" {
if (arguments.component CONTAINS "internal") return 'N/A';
....
</cfscript>
但我还是得到了
答案 0 :(得分:5)
我不相信你可以做你想做的事。
当你在代码中定义一个函数时,即使你用IF / ELSE包围它,运行时编译器仍然要解析代码,以便创建所需的Java字节代码。运行。因此,关于代码组织,您的类/函数已定义两次。函数或组件背后的整个想法是将它在之外的程序或逻辑代码移动到它自己的库或函数组中 - 这样它很容易重用。很抱歉成为坏消息的承担者:)
答案 1 :(得分:2)
你必须这样做:
<cfscript>
if (!isdefined("tested")) {
include "tested.cfm";
}
</cfscript>
然后将tested()
移至tested.cfm
。
或者,如果您正在使用CF11,则可以尝试include "tested.cfm" runonce=true;
请参阅:Can you isolate code from being seen from CF10 compiler?