我正试图在一个cffunction中设置一个变量。
结果如下:
<cfset local.layouts.appLayout = '../../app/layouts' & local.appController.new()>
以上代码有效。在local.layouts.appLayout结构中,它在appControler中指定新方法的返回值。这就是我需要做的事情。
我的问题是我需要动态分配该语句的方法部分。我有另一个变量coreRoute.action在该函数中等于“new”但我似乎无法使语法正确。
我试过这个:
<cfset local.layouts.appLayout = '../../app/layouts' & local.appController.coreRoute.action()>
这不起作用,我明白为什么。我也试过这个:
<cfset local.layouts.appLayout = '../../app/layouts' & local.appController & #coreRoute.action# & '()'>
我尝试了很多这种语法的变体,但我无法做到这一点。
任何人都对如何做到这一点有任何想法。我被卡住了。
提前感谢您的帮助。
更新:在Todd Sharp的帮助下,我最终使用了这个并且效果很好:
<cfinvoke component="#local.appController#" method="#coreRoute.action#" returnvariable="local.act">
<cfset local.layouts.appLayout = '../../app/layouts' & local.act>
答案 0 :(得分:7)
您应该考虑使用<cfinvoke>
进行动态方法调用。尝试谷歌搜索“coldfusion动态方法调用” - 这是最好的结果之一:
答案 1 :(得分:2)
此外,如果你想完全用脚本完成,你可以使用这种方法:
dynFn = this["foo" & bar];
dynFn(stuff);
这是在cfc中,如果您是从cfc外部进行的,或者根本不使用cfc,只需将“this”更改为您的方法所在的位置。