2013-04-22 88 views
1

如果我有调用动态方法名称(从字符串方法名)

<cfset methodName = "a"> 
<cfset object = createObject(...)> 

我如何可以调用从组件object命名methodName功能。我会期望沿线的东西

<cfset object[methodName]()> 

在JS中工作,但这似乎并不奏效。我知道我可以使用cfinvoke,但我不认为我需要深入研究为什么我不想使用该标签(现在将其用作临时修订)的原因。

回答

2

cfinvoke以及invoke()在Adobe ColdFusion的10+的基于脚本的代码。

+0

可悲的是'invoke'在openbd中不可用,只能在CF10中工作,会问Alan是否只是一个简单的补充来让openBD工作,但足够公平。 – 2013-04-22 12:17:25

+0

我没有在那里看到openbd标签。抱歉。 – 2013-04-22 13:47:03

+0

本可以让它更清晰,但有点希望有一些通用的解决方案。 – 2013-04-22 14:06:19

-1

cfinvokeevaluate('object.#a#()')(确保你可以信任的)

+0

正如我在问题的所有版本中提到的,我已经知道'cfinvoke'(bleh),虽然'evaluate'是一个有效的解决方案,但我不认为我需要指出为什么'evaluate'更糟糕。 – 2013-04-22 12:16:34

0

虽然这很简单,但您可以将代码行写入.cfm文件,然后cfinclude它。

2

您可以将未知/动态方法设置为对象的明确重点,并从该键来执行:

<cfset methodName = "a"> 
<cfset object = createObject(...)> 
<cfset object.doMethod = object[methodName]> 
<cfset object.doMethod()> 

仍然不是很优雅,但它避免了<cfinvoke>evaluate()

相关问题