我注意到,当我调用以前包含的(cfinclude) .cfm文件的函数时,此时发生的所有coldfusion (cfimport)都被遗忘了。好像你什么都没进口。我发现这是非常奇怪的行为,所以我分离了它,但是结果保持不变,即使在coldfusion 10中。
我的设置:
/example
functions.cfm:
<cfscript>
function test(){
return "test";
}
</cfscript>
组件/MyCFC.cfc:
component output="false"{}
index.cfm:
<cfscript>
include "functions.cfm";
import components.MyCFC;
foo = test();
bar = new MyCFC();
</cfscript>
此代码将引发coldfusion错误:“未能找到ColdFusion组件或接口MyCFC”。当foo = test();被移除或放在bar = new MyCFC();之后时,代码运行良好。
导入是否放在包含之前或之后并不重要。每当调用包含的函数时,导入就会被遗忘。
这是一个错误还是它应该是这样的行为?
在coldfusion 9,0,0,251028和coldfusion 10,282462中进行测试
发布于 2012-09-25 10:05:01
由于我做了大量的进口,我最近遇到了一些奇怪的行为,并报告说它做CF9 9-bugbase:https://bugbase.adobe.com/index.cfm?event=bug&id=3288035。
ColdFusion只为当前文件解析导入,每当调用不同的文件时,就像“执行上下文”通过导入切换到该文件一样。因此,在您的情况下,当您执行新的ColdFusion时,在functions.cfm中查找导入。然后,当您调用当前文件的方法时,它会切换回并找到导入。
如果我是对的,如果您在导入后直接执行bar = new MyCFC();,那么您的代码应该可以工作。或者在创建类之前,可以在index.cfm中定义另一个方法并调用它。
要解决这个bug,您需要确保在“上下文切换”发生之前(在对象生命周期中第一次使用时)解决导入问题。因此,在外部方法之前调用new MyCFC();。
@Adobe:修复这个很好;)
发布于 2012-09-24 14:55:28
我和@PeterBoughton在一起,这听起来像个窃听器。我也找不到类似的错误报告,所以我会继续提交它。同时,如果您放弃了“导入”,您仍然应该能够使用以下方法引用CFC:
bar = new components.MyCFC();抓得好!
https://stackoverflow.com/questions/12565731
复制相似问题